2014-10-06 84 views
1

我有这样的动作:我更改模型值的控制器,但视图接收与旧值模型

//Edit 
[HttpPost] 
public ActionResult InvoiceType(clsInvoiceType Model, string Stade) 
{ 
    Model.Stade = Stade== "1" ? true : false; 
    return PartialView(Model); 
} 

在这次行动中我试图改变价值Model.Stade和返回模型,但视图始终接收发送到此操作的值,问题是我尝试在操作中更改此处的模型值,并将新模型值返回给视图,但视图接收到原始模型值,因此我的更改无效,问题是什么?

如何更改原始模型值并将它们发送到视图?

+0

只要把断点到这一行动,并观察会发生什么事情一步一步来。 – 2014-10-06 21:58:37

+0

可能是正在返回的缓存数据?向我们显示您从哪里调用ActionResult'InvoiceType'的标记。 – 2014-10-06 22:09:46

+0

我做到了,在动作中改变了数值,但是当模型发送到视图时,它接收到原始值,所以我的更改不起作用 – Wilmer 2014-10-06 22:09:49

回答

0

ModelState对象包含回传给您的操作方法的值。在查看模型中的实际值之前,视图中的Html.*For()辅助方法将始终从ModelState中提取值。如果您想更改值,则需要从ModelState中删除已发布的值。

[HttpPost] 
public ActionResult InvoiceType(clsInvoiceType Model, string Stade) 
{ 
    this.ModelState.Remove("Stade"); // or .Clear() to remove all keys 
    Model.Stade = Stade== "1" ? true : false; 
    return PartialView(Model); 
} 
+0

谢谢,这项工作,但这一行this.ModelState.Remove(“施塔德”)可以产生助手的问题?例如,如果视图有一个使用这个值的帮助器,帮助器可以得到它吗? – Wilmer 2014-10-06 22:27:00

+0

不,这些帮助器在填充值时,会首先在ModelState集合中查找该键的值,如果该值未在ModelState集合中找到,那么它将从该模型对象中提取该值。 – heavyd 2014-10-06 22:30:47

0

可能是你应该禁用缓存:

[OutputCache(Duration=0, VaryByParam="none")] 
[HttpPost] 
public ActionResult InvoiceType(clsInvoiceType Model, string Stade) 
{ 
    Model.Stade = Stade== "1" ? true : false; 
    return PartialView(Model); 
}