1

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

我该怎么做?

4

3 回答 3

2

任何错误消息都是您的ModelState.

例如,如果您有一个必填字段 FirstName,您会收到如下错误消息:

ModelState["FirstName"].Errors[0].ErrorMessage

在这种情况下,您预计只有一个错误。此属性返回“FirstName 字段是必需的”。

您可以使用.ModelState从控制器或视图访问ViewDate.ModelState

ModelState的类型ModelStateDictionaryIDictionary<string, ModelState>. 它只有一个字符串类型的索引器属性。因此,您无法使用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.

于 2013-08-23T12:48:34.927 回答
0

要访问错误,您应该使用ModelState.Errors属性。它包含

模型错误集合

这是一个集合

模型错误

请参阅此处http://msdn.microsoft.com/en-us/library/system.web.mvc.modelstate.errors%28v=vs.108%29.aspx

然后,您可以创建自己的助手,并在客户端访问这些消息。

于 2013-08-23T12:42:48.197 回答
0

对于您可以使用的特定属性

 ViewData.ModelState["Password"].Errors 
于 2013-08-23T12:50:45.967 回答