Значение не сохраняется при отправке с ошибкой проверки - PullRequest
0 голосов
/ 20 марта 2012

Я использую 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, но значение сохраняется в текстовом поле.

1 Ответ

0 голосов
/ 20 марта 2012

Что я делаю не так?

Вы не включаете parent_id в качестве скрытого поля в своей форме. Внутри формы у вас есть один элемент ввода, соответствующий полю start_date, так что это все, на что вы можете надеяться получить в своем действии POST.

Итак:

<%= Html.HiddenFor(Function(model) model.parent_id) %>

DisplayFor, который вы использовали, отображает только значение, оно не выдает никакого поля ввода для передачи этого значения на сервер при отправке формы.

...