проблема скрытого элемента формы - asp.net mvc - PullRequest
0 голосов
/ 03 сентября 2010

Я создаю строго типизированную форму, как это в моем контроллере:

return View ("BlaForm", Bla);

В представлении я использую что-то вроде этого:

(1)

<%= Model.Version %>

(2)

<%= Html.Hidden("Version", Model.Version)%>

Здесь (1) только для целей отладки.

После последовательного обновления моего объекта этовыдает что-то вроде этого:

(1)

10

(2)

<input id="Version" name="Version" type="hidden" value="9" />

Скрытое значение не синхронизировано по какой-то странной причине??? !!!В этом случае значение Version было определенно 10, как установлено отладчиком.Почему это?Кешируются ли скрытые значения?

Спасибо.

Кристиан

PS:

Я также делаю:

if (TempData["ViewData"] != null)
{
 ViewData = TempData["ViewData"] as ViewDataDictionary;
}

вдействие контроллера для поддержания значений формы в случае ошибок валидации.Это, кажется, причина.Но все же я явно делаю: <% = Html.Hidden ("Version", Model.Version)%> .... ????Может быть, я неправильно понимаю жизненный цикл?

Ответы [ 2 ]

2 голосов
/ 03 сентября 2010

Html-помощник всегда будет использовать значение в запросе GET или POST перед значением в вашей модели или ViewData. Это означает, что если вы публикуете Version=9 в действии контроллера и внутри этого действия вы пытаетесь изменить его значение до 10, при возврате представления помощник Html.Hidden будет использовать значение POSTed, а не значение в вашей модели. Единственный обходной путь - пользовательский помощник HTML или просто:

<input id="Version" name="Version" type="hidden" value="<%= Model.Version %>" />
0 голосов
/ 03 сентября 2010

Помощник HTML всегда будет искать значения в ModelStateDictionary, затем в ViewData и после этого использовать параметр значения, указанный в вспомогательном методе.

2 других места в вашем случае.

ModelState state = this.ViewData.ModelState["Version"]; 
state.Value; // this is the value out of the ModelStateDictionary

object value = this.ViewData["Version"]; // this is the value if set 
// out of the ViewData Collection

ModelStateDictionary получает свои записи при привязке модели. Если в качестве параметра метода действия выбрана Версия, Modelbinder (в вашем случае DefaultModelBinder) введет версию ключа с указанным значением запроса get или post.

Если вы измените значение, поместите его в свою модель, вам также придется обновить ModelStateDictionary.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...