这是以下问题的后续:
MVC 3 + $.ajax - 响应似乎正在缓存部分视图的输出
那里有详细的问题描述。但是,我现在已经成功缩小了问题范围,这似乎与 Html.EditorFor 帮助程序有关,因此出现了新问题。
问题:
我使用 $.ajax 将数据发布到服务器,然后返回包含输入控件的部分视图的 html。问题在于,尽管将新创建的对象传递给部分视图模型,各种 @Html.EditorFor 和 @Html.DropDownListFor 帮助程序仍返回旧数据!
我可以通过在 Html 帮助器旁边打印该值来证明模型已正确地将新对象传递给帮助器。 IE:
@Html.EditorFor(model => model.Transaction.TransactionDate)
@Model.Transaction.TransactionDate.ToString()
如下图所示,@Html.EditorFor 返回错误的数据:
[请注意,Commentario 文本框旁边的值是日期时间,因为我正在测试将默认值替换为随每个帖子而变化的值,即 DateTime。]
如果我将 TransactionDate 的 @Html.EditorFor 替换为普通的旧 @Html.TextBox():
@Html.TextBox("Transaction_TransactionDate", Model.Transaction.TransactionDate)
然后它为新的 Transaction 对象呈现正确的 TransactionDate 值,即 DateTime.MinValue (01/01/0001...)。
所以...
问题出在 @Html.EditorFor 帮助程序上。 TextBoxFor 和 DropDownListFor 也会出现此问题。
问题是这些助手似乎缓存了旧值。
我究竟做错了什么??!
EDIT:
我刚刚尝试在自定义编辑器模板中调试日期,其中 ViewData.TemplateInfo.FormattedModelValue 显示正确的值,即“01/01/0001”。然而,一旦到达 Fiddler,响应就会显示旧日期,例如上图中的“01/09/2011”。
结果,我只是认为这里正在进行一些缓存,但我没有设置任何缓存,所以没有任何意义。