我今天正在努力将MVC1应用程序迁移到MVC2,并且在将ValidationMessage更改为ValidationMessageFor实现时遇到了问题。
以下是我视图中的选择列表
<%=Html.DropDownListFor(model => model.SecurityQuestions[0].Question, "Some Security question", new { @class = "form_element_select" })%>
以下代码工作正常,我可以看到验证消息来自modelstate。
<%= Html.ValidationMessage("SecurityQuestions_0__Question")%>
但这个不起作用:
<%= Html.ValidationMessageFor(model => model.SecurityQuestions[0].Question)%>
SecurityQuestions是我模型中的通用列表
public List<SecurityQuestion> SecurityQuestions { get; set; }
这有点像“ValidationMessageFor”中的错误,还是我在这里遗漏了什么?
答案 0 :(得分:1)
问题是ValidationMessageFor仅使用最后一个属性名作为验证消息密钥。
在你的情况下,这意味着:
<%= Html.ValidationMessageFor(model => model.SecurityQuestions[0].Question) %>
等于
<%= Html.ValidationMessage("Question") %>
而不是你的想法。不幸的是,在这种情况下,您将不得不使用非强类型帮助器来获得整个字符串。
答案 1 :(得分:1)
此问题已在MVC V3中修复
答案 2 :(得分:0)
您可以在 ValidationMessageFor 生成的密钥下添加要查看到ModelState的错误。 当然是一个黑客,但最快的方式去。并且它不会为您的标记添加任何丑陋的“SecurityQuestions_0__Question”。