我在 mvc4 操作中有一个标准形式。我使用 jQuery.post 在服务器上执行回发操作:
[HttpPost]
public ActionResult ContactUpdate(ContactClass model)
{
var originalContact = contactService.Get(model.Id);
if (ModelState.IsValid && TryUpdateModel(originalContact))
{
contactService.Update(originalContact);
}
var updatedContact = contactService.Get(model.Id);
return PartialView("ContactView", updatedContact );
}
这可以按预期工作,此处的代码仅用于说明,因为我的问题稍后会在请求中出现。我的联系服务还没有实现更新,所以 updatedContact 实际上与原始的相同(当您执行更新时,所有更改都将被忽略并返回旧对象)。因此,当我将网页中的即 PostCode 从 555 更改为 666 时,updatedContact.PostCode 为 555。我在调试器中检查了它的值,也在调用的 cshtml 文件中检查了它的值,@Html.EditorFor(m=>m.PostCode)
并且在任何地方它都有旧值(未更新)。问题是返回的 html(从 firebug 和 chrome 开发工具中的网络捕获)具有:
<input class="text-box" id="PostCode" name="PostCode" type="text" value="666">
这种行为对于所有属性都是相同的,据我所知,没有输出缓存(即使是,它也是一个 POST 请求,因此应该绕过缓存)。当我刷新页面时,我得到“旧”值。
起初,我认为这是我的 ajaxSuccess 函数$("#myform").replaceWith(returnedText)
,但在仔细检查响应内容后,我确信问题出在返回的 html 中。这怎么可能?
这个错误现在造成了我的更新正在运行的错觉,如果它正在运行,我可能甚至都不知道它。这是一种潜在的危险行为,因为某些属性的值可能与发布到控制器的值不同,并且用户在更新后将无法看到它,因此我可能不得不刷新整个页面以解决问题。