Форма MVC (непреднамеренно) заполняется на http get - PullRequest
0 голосов
/ 04 февраля 2011

Кажется, есть какая-то фундаментальная часть MVC, которую я не понимаю.Вот ситуация:

У меня есть View (Index.aspx) с тремя частичными представлениями (одно с таблицей, два с одной формой каждое).

Все четыре представления строго типизированы;родительский объект (index.aspx) имеет модель, которая содержит три свойства, которые передаются как модели частичным представлениям.

Одна из моделей для одного из частичных представлений (форма, позволяющая пользователю создаватьновая запись для таблицы) имеет аннотации DataAnnotations для проверки при отправке формы.Два поля формы являются целыми числами с RangeAttribute [Range(1000,9999)], а два - DateTime с DisplayFormatAttribute, например [DisplayFormat(DataFormatString = "{0:dd/MMM/yyyy}")]

Мои частичные представления используют помощник Html.EditorFor () для полей ввода, например:

<%: Html.EditorFor<MyType, DateTime>(m => m.StartDate, new { @class = "specialclass" })%>

В моем методе Action я создаю модель View для своего родителя, а также добавляю пустые модели представления для частичных чисел (кроме таблицы, заполненной записями), а затем передаю ее в свой оператор return View ().Я исключил, что таблица будет заполнена, но поля формы должны быть пустыми, но это не так.

Итак, почему мои поля формы заполнены 0 для двух целочисленных полей и минимальным значением даты длядва поля даты, когда я получаю HTTP для представления?

Что я делаю неправильно / что я не получаю?

Я предполагаю, что мой вопрос: если у меня строго типизированный пользовательконтроль, который является формой, как это должно быть обработано, когда я получаю http для родительского представления?Мне нужно передать ему модель, верно?

1 Ответ

0 голосов
/ 04 февраля 2011

Независимо от того, установлены вы значения или нет, система попытается представить их. Поскольку int не имеет значения nullable, он имеет тенденцию возвращать 0 при неинициализированном состоянии, чтобы очистить его. Я предполагаю, что DateTime, поскольку он будет нулевым, по умолчанию использует DateTime.Min, поскольку вы указали, что ожидаете, что будут данные как через поле, так и через форматирование.

...