Такое поведение заставляет меня задуматься о моем здравомыслии ..
У меня есть форма, в которой есть два места для ввода данных, назовем их ValueA и ValueB. Пользователь может ввести значение в любом из них, и форма отправит.
<div id="MyUpdateTarget">
<% using (Ajax.BeginForm("MyControllerAction", new AjaxOptions { UpdateTargetId = "MyUpdateTarget" })) { %>
<%=Html.TextBox("ValueA", Model.ValueA, new Dictionary<string, object> {
{ "onchange", "$('#SubmitButton').click(); return false;" },
}) %>
<%=Html.TextBox("ValueB", Model.ValueB, new Dictionary<string, object> {
{ "onchange", "$('#SubmitButton').click(); return false;" },
}) %>
<input id="SubmitButton" type="submit" value="Save" style="display: none;" />
<% } %>
</div>
Действие контроллера выглядит следующим образом:
public ActionResult MyControllerAction(MyViewModel viewModel)
{
// делать что-то еще ...
return PartialView("MyPartialView", viewModel);
}
ViewModel просто так:
public class MyViewModel
{
private int _valueA;
private int _valueB;
public int ValueA
{
get
{
return _valueA;
}
set
{
if (value > 0)
{
ValueB = 0;
}
_valueA = value;
}
}
public int ValueB
{
get
{
return _valueB;
}
set
{
if (value > 0)
{
ValueA = 0;
}
_valueB = value;
}
}
}
Теперь неожиданный кусок. Скажем, страница изначально загружается, а ValueB имеет значение 7. Пользователь изменяет ValueA на 5, и форма отправляется. Я могу поставить точку останова в действии контроллера и увидеть оба значения в параметре viewModel. На этом этапе ValueA равно 5, а ValueB равно 0 (из-за настройки ValueA). Действие возвращает viewModel как часть PartialView. Вернувшись в частичное, я могу поставить точку останова в строке Html.TextBox («ValueB», Model.ValueB, ...) и увидеть, что ValueB действительно равен 0. Но когда форма отображается в браузере, ValueB по-прежнему имеет значение 7. И вот где я застрял. Я даже изменил цель обновления на другой div, так что частичное просто выплевывает форму где-то совершенно иначе, но оно по-прежнему имеет первоначальное значение 7, хотя в процессе отладки я видел, что значение 0 возвращалось из контроллер.
Что-то мне не хватает?