这种行为让我怀疑我的理智..
我有一个表单,它有两个接受输入的地方,我们称它们为 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。这就是我卡住的地方。我什至将 Update 目标更改为不同的 div,以便部分只是在某个完全不同的地方吐出表单,但它仍然具有原始值 7,
有什么我想念的吗?