У меня есть форма:
@using (Html.BeginForm("QuoteUpdate", "Home", FormMethod.Post))
{
@Html.DropDownList("network", Model.availableNetworks);
@Html.DropDownList("grade", Model.grades);
@Html.HiddenFor(o => o.Product.id);
<button type="submit">Get Quote</button>
}
И контроллер:
[HttpPost]
public ActionResult QuoteUpdate(int? id, string network, string grade )
{
}
Свойство id
всегда равно null после отправки формы. Я проверил источник, и скрытое поле имеет правильное значение в визуализированном HTML.
Я не могу понять, почему этот параметр всегда равен нулю. Что мне не хватает?
Поскольку вы получаете доступ к вложенному свойству на вашей модели, сгенерированный HTML-код, вероятно, выглядит примерно так:
<input type="hidden" id="Product_id" name="Product.id" />
Когда ваша форма отправляется в действие контроллера, нет параметра, который соответствует Product.Id
.
Вы можете обойти это, изменив сгенерированное имя input
(см. Этот ответ для получения дополнительных сведений о том, как это сделать):
@Html.HiddenFor(o => o.Product.id, new { Name = "id" });
Что будет генерировать:
<input type="hidden" id="Product_id" name="id" />
Тогда нужно правильно моделировать привязку.