У меня есть новое приложение MVC 4 с довольно простым представлением/контроллером. Связанная модель содержит пару свойств, которые я сопоставил с полями формы Hidden. Когда страница отображается в первый раз (например, с помощью действия HttpGet), все выглядит нормально. Но когда форма публикуется путем нажатия кнопки «Отправить», результирующая модель, представленная действию, больше не имеет установленных значений скрытого поля. Вот пошаговое руководство по деталям.
Вот пример Модели:
public class Application
{
public bool ShowSideBars { get; set; }
}
Вот начальное Контроллер *Действие* (которое работает нормально):
[HttpGet]
public ActionResult Application()
{
var model = Request.ParseFromQueryString<Application>();
model.ShowSideBars = true;
return View(model);
}
Это сопоставляется с View следующим образом:
<fieldset>
@Html.HiddenFor(m => m.ShowSideBars)
...
</fieldset>
В результате внутри набора полей будет отображаться следующая разметка:
<input data-val="true" data-val-required="The ShowSideBars field is required." id="ShowSideBars" name="ShowSideBars" type="hidden" value="True" />
Примечание. Хотелось бы мне знать, почему MVC решил добавить содержимое "... поле обязательно", хотя я не пометил его как обязательное, но это уже другой вопрос эм>
Вот Действие, которое вызывается при отправке формы. С этого момента для вышеупомянутого свойства больше не будет установлено значение «true».
[HttpPost]
public ActionResult Application(Application application)
{
// Other work done here
return View(application);
}
В настоящее время нет пользовательских связывателей моделей. Кроме того, я протестировал некоторые другие типы данных и вижу то же самое.
Может кто-нибудь объяснить, почему скрытые значения формы не возвращаются? Я просто делаю все это неправильно?
data-val-required
визуализируется, потому что тип моделиbool
. Логические значения по умолчанию обязательны, они должны быть истинными или ложными. Если вы не хотите видеть data-val-required, сделайте свойствоbool?
. - person danludwig   schedule 19.03.2012