Передача параметра в контроллер из представления с помощниками тегов, не работающими над отправкой

Я использую ASP.NET Core 2.2.

Я пытаюсь передать идентификатор (Guid) из моего представления в свой индекс контроллера, используя кнопку отправки, украшенную помощниками тегов asp, как показано ниже:

<input type="submit" value="Go" asp-controller="MyController" asp-action="Index" asp-route-id="@Model.Id" />

Мой метод действия контроллера выглядит так:

public IActionResult Index(Guid id)
{
    return View();
}

Идентификатор всегда передается как Guid.Empty при нажатии кнопки отправки.

Я перешел на использование тега привязки с теми же вспомогательными значениями тега, и идентификатор заполнен правильно:

<a asp-controller="MyController" asp-action="Index" asp-route-id="@Model.Id">Go</a>

Я могу обойти это, создав стиль привязки, чтобы она выглядела как кнопка, но для понимания, может ли кто-нибудь объяснить, почему привязка будет работать в этой ситуации, а кнопка отправки - нет?

ОБНОВЛЕНО (сгенерированный HTML)

HTML с отправкой

<form>
    <div class="d-flex">
        <input type="submit" value="Go" formaction="" />
    </div>
</form>

HTML с привязкой

<form>
    <div class="d-flex">
        <a href="/MyController?Id=2590bc68-6784-4174-90f5-e7ceb1b4d0e9">Go</a>
    </div>
</form>

person Coy Meeks    schedule 22.08.2019    source источник


Ответы (1)


поместите asp-route-id="..." в тег формы, а не на кнопку.

person LazZiya    schedule 22.08.2019
comment
... или скрытое поле: @ Html.HiddenFor ... Причина в том, что кнопка отправки предназначена для запуска действия формы. (Которая затем передает свои данные контроллеру.) - person pcalkins; 22.08.2019