5

在这里使用 MVC3 和 razor 遇到了一个非常奇怪的问题。

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

在视图模型中,我有一个长属性,如下所示:

public long QuestionID { get; set; }

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

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

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

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

知道为什么会这样吗?

4

1 回答 1

8

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

您可以通过使用解决此问题

ModelState.Remove("QuestionID");

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

ModelState.Clear();
于 2012-04-30T23:21:02.290 回答