Asp.net mvc 如何在ValidationMessageFor中获取原始validationmessages?

Asp.net mvc 如何在ValidationMessageFor中获取原始validationmessages?,asp.net-mvc,validation,asp.net-mvc-4,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="

我得到了一个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标记)

本质上,我需要一个自定义的ValidationMessageforHTML助手,它只返回错误消息本身


如何执行此操作?

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

ModelErrorCollection

这是一个

模型误差

参考这里


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

任何错误消息都是您的
ModelState
的一部分

例如,如果您有一个必填字段FirstName,则可以得到如下错误消息:

ModelState["FirstName"].Errors[0].ErrorMessage
string errorMessage = ModelState.For<Person>(p => p.FirstName).Errors[0].ErrorMessage;
在这种情况下,您希望只有一个错误。此属性返回“FirstName字段是必需的”

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

ModelState
属于
ModelStateDictionary
类型,它是一个
IDictionary
。它只有一个字符串类型的索引器属性。因此,您无法使用
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];
    }
}
公共静态类ModelStateExtension
{
(此ModelStateDictionary字典,
表达式(表达式)
{
字符串propertyName=ExpressionHelper.GetExpressionText(表达式);
返回字典[propertyName];
}
}
您可以这样使用它:

ModelState["FirstName"].Errors[0].ErrorMessage
string errorMessage = ModelState.For<Person>(p => p.FirstName).Errors[0].ErrorMessage;
string errorMessage=ModelState.For(p=>p.FirstName)。错误[0]。errorMessage;

如果需要,您可以让扩展方法直接为第一个错误返回
ErrorMessage
,而不是
ModelState。

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

 ViewData.ModelState["Password"].Errors 

你能说得更具体些吗?您想在哪里解析这些消息?在服务器端或客户端。展示你已经尝试过的东西。@DawidDziadkiewicz很抱歉这个错误的解释-我已经更新了我的问题。此外,它必须是客户端的。是否可以在modelstate中使用lambda表达式?与ModelState相同(m=>m.Password)。错误[0]。错误消息?