生成的视图中的模型值错误

时间:2012-04-30 22:31:07

标签: asp.net-mvc asp.net-mvc-3 razor

使用MVC3和razor进入一个非常奇怪的问题。

我正在整理的应用程序显示了一系列面试问题。我有一个问题的观点(问题的内容来自viewmodel)。所以在我从一个问题回复后,我可能会返回相同的问题视图(但使用不同的viewmodel实例)。

在viewmodel中我有一个很长的属性:

public long QuestionID { get; set; }

我试图使用隐藏的输入字段来存储视图中的值:

@Html.HiddenFor(m => m.QuestionID)

我的问题是,当我从问题到问题时,隐藏字段在最终生成的html中没有变化。在所有进一步的问题中,它仍然是第一个questionID的值。所有其他内容都在变化,我还有一些其他隐藏的字段正常工作。我已在生成模型的控制器中验证了正确的值。我可以在剃刀文件中设置断点,我可以看到模型与正确的QuestionID一样。我尝试使用@ Html.TextBoxFor也有同样的问题。当我手动创建一个像下面这样的隐藏字段时,它工作正常,这就是我真正困扰的事情。

<input type="hidden" id="QuestionID" name="QuestionID" value="@Model.QuestionID" />

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:7)

在表单发布后,MVC会跟踪ModelState中发布的值。即使您更改了模型的值,HiddenFor助手也会首先使用ModelState值。这是因为绑定可能失败,或绑定可能是一个复杂的对象,而ModelState中的字符串值是他们实际输入的。

您可以使用

解决此问题
ModelState.Remove("QuestionID");

或者,如果您真的只想将其视为一个全新的页面,

ModelState.Clear();