implementing ValidationMessageFor

泪湿孤枕 提交于 2019-12-10 12:04:40

问题


I was working on migrating MVC1 app to MVC2 today and i have come across a problem while changing the ValidationMessage to ValidationMessageFor implementation.

The below is the selectlist in my View

<%=Html.DropDownListFor(model => model.SecurityQuestions[0].Question,  "Some Security question", new { @class = "form_element_select" })%>

The below code works fine and i can see the validation message came from modelstate.

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

but this one does not work:

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

SecurityQuestions is a generic list in my model

public List<SecurityQuestion> SecurityQuestions { get; set; }

Is this somewhat a bug in "ValidationMessageFor" or am i missing something here?

I have previously asked this question on asp.net forums.


回答1:


The problem is that ValidationMessageFor only uses the last property name as validation message key.

In your case this means that:

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

equals

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

and not what you thought it would. Unfortunately in this case you will have to use the non-strong typed helper to have the whole string as it should be.




回答2:


This problem is fixed in MVC V3




回答3:


You can add error you want to see to ModelState, under key that is generated by ValidationMessageFor. Sure its a hack, but the fastest way to go. And it doesnt add any ugly "SecurityQuestions_0__Question" to your markup.



来源:https://stackoverflow.com/questions/2681159/implementing-validationmessagefor

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!