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)
知道为什么会这样吗?
在表单发布后,MVC会跟踪发布的值ModelState.即使您更改模型的值,HiddenFor帮助程序也会ModelState首先使用该值.这是因为绑定可能已失败,或绑定可能是一个复杂的对象,而字符串值ModelState是他们实际输入的内容.
您可以使用以解决此问题
ModelState.Remove("QuestionID");
Run Code Online (Sandbox Code Playgroud)
或者,如果你真的只是想把它当作一个全新的页面,
ModelState.Clear();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
821 次 |
| 最近记录: |