Я использую MVC3 .NET4.0 (VB), и я вижу странное поведение в простом View.Это представление Create, настроенное как:
Inherits="System.Web.Mvc.ViewPage(Of MyProject.MyTable)
Контроллер довольно прост.Он принимает идентификатор родительской записи, к которой добавляется эта запись:
Function Create(parent As Integer) As ActionResult
Return View(New MyTable With {.parent_id = parent})
End Function
Представление также принимает дату среди прочего, но сводится к следующему:
<% Using Html.BeginForm()%>
<%=Html.ValidationSummary(True)%>
<%=Html.DisplayFor(Function(model) model.parent_id)%>
<%=Html.TextBoxFor(Function(model) model.start_date)%>
<%=Html.ValidationMessageFor(Function(model) model.start_date, "*")%>
<button type="submit" id="submitButton">Save</button>
<% End Using%>
Я тестирую обработку ошибок даты, поэтому прямо сейчас мой почтовый контроллер просто проверяет ошибки и больше ничего не делает:
<HttpPost()>
Function Create(model As MyTable) As ActionResult
If ModelState.IsValid Then
Return RedirectToAction("Index")
Else
Return View(model)
End If
End Function
Когда я впервые загружаю представление, я вижу отображенный родительский идентификаторна форме.Если я введу неверную дату в поле начальной даты и нажму «Отправить», форма вернется с подсвеченным неверным значением, но родительский идентификатор = 0. Если я нарушу код в сообщении, я вижу, что «модель» нене может быть установлен родительский идентификатор.Это, очевидно, вызывает все виды проблем, потому что я по существу потерял, кто является родителем.Что я делаю не так?
ОБНОВЛЕНИЕ
По предложению Дарина я изменил DisplayFor на HiddenFor и не увидел никакой разницы.Тогда я попробовал TextBoxFor и получил странные результаты.Я все еще не вижу идентификатор родителя в функции post, но значение сохраняется в текстовом поле.