实现ValidationMessageFor

时间:2010-04-21 07:54:32

标签: asp.net validation asp.net-mvc-2

我今天正在努力将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”中的错误,还是我在这里遗漏了什么?

我之前曾问过this question on asp.net forums

3 个答案:

答案 0 :(得分:1)

问题是ValidationMessageFor仅使用最后一个属性名作为验证消息密钥。

在你的情况下,这意味着:

<%= Html.ValidationMessageFor(model => model.SecurityQuestions[0].Question) %>

等于

<%= Html.ValidationMessage("Question") %>

而不是你的想法。不幸的是,在这种情况下,您将不得不使用非强类型帮助器来获得整个字符串。

答案 1 :(得分:1)

此问题已在MVC V3中修复

答案 2 :(得分:0)

您可以在 ValidationMessageFor 生成的密钥下添加要查看到ModelState的错误。 当然是一个黑客,但最快的方式去。并且它不会为您的标记添加任何丑陋的“SecurityQuestions_0__Question”