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

Ada*_*dam 4 asp.net-mvc razor asp.net-mvc-3

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

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

在viewmodel中我有一个很长的属性,如下所示:

public long QuestionID { get; set; }
Run Code Online (Sandbox Code Playgroud)

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

@Html.HiddenFor(m => m.QuestionID)
Run Code Online (Sandbox Code Playgroud)

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

<input type="hidden" id="QuestionID" name="QuestionID" value="@Model.QuestionID" />
Run Code Online (Sandbox Code Playgroud)

知道为什么会这样吗?

bha*_*lin 7

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

您可以使用以解决此问题

ModelState.Remove("QuestionID");
Run Code Online (Sandbox Code Playgroud)

或者,如果你真的只是想把它当作一个全新的页面,

ModelState.Clear();
Run Code Online (Sandbox Code Playgroud)