Id POST как скрытое поле, но ноль в контроллере

1

У меня есть форма:

@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.

Я не могу понять, почему этот параметр всегда равен нулю. Что мне не хватает?

Теги:
asp.net-mvc
asp.net-mvc-5.2

1 ответ

9
Лучший ответ

Поскольку вы получаете доступ к вложенному свойству на вашей модели, сгенерированный 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" />

Тогда нужно правильно моделировать привязку.

  • 0
    Спасибо, что исправили.
  • 0
    @ Guerrilla: Конечно, рад помочь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню