asp.net-mvc-3 – MVC 3 – Html.EditorFor似乎缓存旧值$.ajax调用

前端之家收集整理的这篇文章主要介绍了asp.net-mvc-3 – MVC 3 – Html.EditorFor似乎缓存旧值$.ajax调用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是从以下问题的跟随:

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”在上面的图像。

结果,我只是认为有一些缓存在这里,但我没有设置,所以没有什么有意义。

解决方法

这里没有涉及缓存。这只是HTML助手如何工作。他们首先查看ModelState绑定其值,然后在模型中。因此,如果您打算修改控制器操作中的任何POSTed值,请务必先将它们从模型状态中删除
[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);
}

猜你在找的asp.Net相关文章