如何在ValidationMessageFor中获取原始验证消息?

时间:2013-08-23 12:26:29

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

我有一个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帮助器,它只返回错误信息本身。

我该怎么做?

3 个答案:

答案 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