MVC 3 + $.ajax – response seems to be caching output from partial view
那里有一个问题的详细描述。但是,我现在设法缩小问题,这似乎是与Html.EditorFor帮助者,因此新的问题。
问题:
我使用$ .ajax发布数据到服务器,然后返回保存输入控件的局部视图的html。问题是,尽管传递一个新创建的对象到部分视图模型,各种@ Html.EditorFor和@ Html.DropDownListFor帮助器返回旧数据!
我可以证明模型已经正确地通过一个新的对象到帮助者,通过打印在Html帮助器旁边的值。即:
@Html.EditorFor(model => model.Transaction.TransactionDate) @Model.Transaction.TransactionDate.ToString()
如下图所示,@ Html.EditorFor返回错误的数据:
[注意,Comentario文本框旁边的值是一个日期时间,因为我测试用一个随每个帖子更改的值(即DateTime)来替换默认值。]
如果我用一个简单的老@ Html.TextBox()替换@ Html.EditorFor的TransactionDate:
@Html.TextBox("Transaction_TransactionDate",Model.Transaction.TransactionDate)
然后,它为一个新的Transaction对象呈现正确的TransactionDate值,即DateTime.MinValue(01/01/0001 …)。
因此…
问题是用@ Html.EditorFor帮助。这个问题也发生在TextBoxFor和DropDownListFor。
问题是这些帮助者似乎缓存了旧的价值。
我究竟做错了什么??!
编辑:
我刚刚试图在自定义编辑器模板中的日期调试,在那里,ViewData.TemplateInfo.FormattedModelValue显示正确的值,即“01/01/0001”。然而,一旦它到达Fiddler,响应显示旧的日期,例如,“01/09/2011”在上面的图像。
结果,我只是认为有一些缓存在这里,但我没有设置,所以没有什么有意义。
解决方法
[HttpPost] public virtual ActionResult AjaxCreate(Transaction transaction) { if (ModelState.IsValid) { service.InsertOrUpdate(transaction); service.Save(); } service.ChosenCostCentreId = transaction.IdCostCentre; Transactionviewmodel viewmodel = new Transactionviewmodel(); ModelState.Remove("Transaction"); viewmodel.Transaction = new Transaction(); ModelState.Remove("CostCentre"); viewmodel.CostCentre = service.ChosenCostCentre; ... return PartialView("_Create",viewmodel); }