我有一个asp.net mvc4应用程序,我只想检索validationmessagefor的确切错误字符串,而不是span标记,类等。
目前从ValidationMessageFor返回以下内容:
<span class="field-validation-error" data-valmsg-replace="true" data-valmsg-for="Password">
<span class="" for="Password" generated="true">The Password field is required.</span>
</span>
我想只返回:密码字段是必需的。
这是因为我需要将确切的值插入另一个元素属性(所以我不能使用HTML标记)。
基本上我需要一个自定义的ValidationMessageFor html帮助器,它只返回错误信息本身。
我该怎么做?
答案 0 :(得分:2)
任何错误消息都是ModelState
。
例如,如果您有必填字段FirstName,则可以收到如下错误消息:
ModelState["FirstName"].Errors[0].ErrorMessage
在这种情况下,您希望只有一个错误。此属性返回'FirstName字段是必需的'。
您可以使用ModelState
从您的控制器或视图中访问ViewDate.ModelState
。
ModelState
属于ModelStateDictionary
类型IDictionary<string, ModelState>
。它只有一个string类型的索引器属性。因此,您无法使用ModelState[p => p.Property]
访问它。但是,您可以轻松创建一个扩展方法来帮助您:
public static class ModelStateExtension
{
public static ModelState For<TModel>(this ModelStateDictionary dictionary,
Expression<Func<TModel, object>> expression)
{
string propertyName = ExpressionHelper.GetExpressionText(expression);
return dictionary[propertyName];
}
}
你可以像这样使用它:
string errorMessage = ModelState.For<Person>(p => p.FirstName).Errors[0].ErrorMessage;
如果需要,您可以让扩展方法直接返回ErrorMessage
第一个错误,而不是ModelState.
答案 1 :(得分:0)
要访问错误,您应该使用 ModelState.Errors 属性。它包含
ModelErrorCollection
whith是
的集合ModelError
请参阅此处http://msdn.microsoft.com/en-us/library/system.web.mvc.modelstate.errors%28v=vs.108%29.aspx
然后,您可以创建自己的帮助程序,并在客户端访问这些消息。
答案 2 :(得分:0)
对于特定属性,您可以使用
ViewData.ModelState["Password"].Errors