Asp.net mvc 4 ModelState.AddModelError为什么没有ModelState.AddModelSuccess?

Asp.net mvc 4 ModelState.AddModelError为什么没有ModelState.AddModelSuccess?,asp.net-mvc-4,controller,modelstate,Asp.net Mvc 4,Controller,Modelstate,ModelState是一个字典对象,它包含模型和模型构建验证的状态 ModelState.AddModelError("MyKey", "My Error Message"); AddModelError()将指定的错误消息添加到与指定键(MyKey)链接的模型状态字典的错误集合中 为什么没有ModelState.AddModelSucces(“MyKey”、“我的错误消息”)?谁能告诉我如何在视图中显示成功消息 ModelState.AddModelSucces("MyKey", "M

ModelState是一个字典对象,它包含模型和模型构建验证的状态

ModelState.AddModelError("MyKey", "My Error Message");   
AddModelError()
将指定的错误消息添加到与指定键(MyKey)链接的模型状态字典的错误集合中

为什么没有
ModelState.AddModelSucces(“MyKey”、“我的错误消息”)
?谁能告诉我如何在视图中显示成功消息

ModelState.AddModelSucces("MyKey", "My Error Message") ???

您可以按照与HTML.ValidationMessageFor相同的行创建HTML帮助程序扩展方法

下面是一个我很快想到的例子,但你可以进一步扩展它。看一看,获得更多的想法

这将输出一个带有css class
字段验证有效的
span
标记

<span class="field-validation-valid">My success message</span>
扩展方法

public static MvcHtmlString ValidationSuccessMessageFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
{
    return ValidationSuccessMessageFor(htmlHelper, expression, null, new RouteValueDictionary());
}

public static MvcHtmlString ValidationSuccessMessageFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, string validationMessage)
{
    return ValidationSuccessMessageFor(htmlHelper, expression, validationMessage, new RouteValueDictionary());
}

public static MvcHtmlString ValidationSuccessMessageFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, string validationMessage, object htmlAttributes)
{
    return ValidationSuccessMessageFor(htmlHelper, expression, validationMessage, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
}

public static MvcHtmlString ValidationSuccessMessageFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, string validationMessage, IDictionary<string, object> htmlAttributes)
{
    return ValidationMessageHelper(htmlHelper, ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData), ExpressionHelper.GetExpressionText(expression), validationMessage, htmlAttributes);
}

private static MvcHtmlString ValidationMessageHelper(this HtmlHelper htmlHelper, ModelMetadata modelMetadata, string expression, string validationMessage, IDictionary<string, object> htmlAttributes)
{
    var modelName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(expression);
        FormContext formContext = htmlHelper.ViewContext.ClientValidationEnabled ? htmlHelper.ViewContext.FormContext : null;

    if (!htmlHelper.ViewData.ModelState.ContainsKey(modelName) && formContext == null)
    {
        return null;
    }

    var modelState = htmlHelper.ViewData.ModelState[modelName];

    if (modelState == null || (modelState != null && (modelState.Errors == null || modelState.Errors.Count > 0)))
    {
        return null;
    }

    var builder = new TagBuilder("span");
    builder.MergeAttributes(htmlAttributes);
    builder.AddCssClass(HtmlHelper.ValidationMessageValidCssClassName);

    if (!String.IsNullOrEmpty(validationMessage))
    {
        builder.SetInnerText(validationMessage);
    }

    return MvcHtmlString.Create(builder.ToString(TagRenderMode.Normal));
}
public static MvcHtmlString ValidationSuccessMessageFor(此HtmlHelper HtmlHelper,表达式)
{
返回ValidationSuccessMessageFor(htmlHelper,表达式,null,new RouteValueDictionary());
}
公共静态MvcHtmlString ValidationSuccessMessageFor(此HtmlHelper HtmlHelper、表达式、字符串验证消息)
{
返回ValidationSuccessMessageFor(htmlHelper,表达式,validationMessage,new RouteValueDictionary());
}
公共静态MvcHtmlString ValidationSuccessMessageFor(此HtmlHelper HtmlHelper、表达式、字符串验证消息、对象htmlAttributes)
{
返回ValidationSuccessMessageFor(htmlHelper,表达式,validationMessage,htmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
}
公共静态MvcHtmlString ValidationSuccessMessageFor(此HtmlHelper HtmlHelper、表达式、字符串验证消息、IDictionary htmlAttributes)
{
返回ValidationMessageHelper(htmlHelper、ModelMetadata.FromLambdaExpression(表达式、htmlHelper.ViewData)、ExpressionHelper.GetExpressionText(表达式)、validationMessage、htmlAttributes);
}
私有静态MVCHTMLSTING ValidationMessageHelper(此HtmlHelper HtmlHelper、模型元数据模型元数据、字符串表达式、字符串验证消息、IDictionary htmlAttributes)
{
var modelName=htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(表达式);
FormContext FormContext=htmlHelper.ViewContext.ClientValidationEnabled?htmlHelper.ViewContext.FormContext:null;
如果(!htmlHelper.ViewData.ModelState.ContainsKey(modelName)&&formContext==null)
{
返回null;
}
var modelState=htmlHelper.ViewData.modelState[modelName];
如果(modelState==null | | |(modelState!=null&&(modelState.Errors==null | | modelState.Errors.Count>0)))
{
返回null;
}
var builder=新标记生成器(“span”);
builder.MergeAttributes(HtmlatAttributes);
builder.AddCssClass(HtmlHelper.validationMessageValidcsClassName);
如果(!String.IsNullOrEmpty(validationMessage))
{
builder.SetInnerText(validationMessage);
}
返回MvcHtmlString.Create(builder.ToString(TagRenderMode.Normal));
}

根据设计,您只会向模型状态添加错误消息。如果您想要成功消息,只需使用其他视图模型或viewbag即可。@David
ModelState.IsValid
表示布尔值我想知道如何添加成功消息,如
ModelState.AddModelSuccess
很遗憾,此方法不可用?使用类似TempData的方法?这是一个字典集合。@David+1我可以使用
TempData[“key”]
public static MvcHtmlString ValidationSuccessMessageFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
{
    return ValidationSuccessMessageFor(htmlHelper, expression, null, new RouteValueDictionary());
}

public static MvcHtmlString ValidationSuccessMessageFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, string validationMessage)
{
    return ValidationSuccessMessageFor(htmlHelper, expression, validationMessage, new RouteValueDictionary());
}

public static MvcHtmlString ValidationSuccessMessageFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, string validationMessage, object htmlAttributes)
{
    return ValidationSuccessMessageFor(htmlHelper, expression, validationMessage, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
}

public static MvcHtmlString ValidationSuccessMessageFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, string validationMessage, IDictionary<string, object> htmlAttributes)
{
    return ValidationMessageHelper(htmlHelper, ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData), ExpressionHelper.GetExpressionText(expression), validationMessage, htmlAttributes);
}

private static MvcHtmlString ValidationMessageHelper(this HtmlHelper htmlHelper, ModelMetadata modelMetadata, string expression, string validationMessage, IDictionary<string, object> htmlAttributes)
{
    var modelName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(expression);
        FormContext formContext = htmlHelper.ViewContext.ClientValidationEnabled ? htmlHelper.ViewContext.FormContext : null;

    if (!htmlHelper.ViewData.ModelState.ContainsKey(modelName) && formContext == null)
    {
        return null;
    }

    var modelState = htmlHelper.ViewData.ModelState[modelName];

    if (modelState == null || (modelState != null && (modelState.Errors == null || modelState.Errors.Count > 0)))
    {
        return null;
    }

    var builder = new TagBuilder("span");
    builder.MergeAttributes(htmlAttributes);
    builder.AddCssClass(HtmlHelper.ValidationMessageValidCssClassName);

    if (!String.IsNullOrEmpty(validationMessage))
    {
        builder.SetInnerText(validationMessage);
    }

    return MvcHtmlString.Create(builder.ToString(TagRenderMode.Normal));
}