Asp.net mvc 4 ModelState.AddModelError为什么没有ModelState.AddModelSuccess?
ModelState是一个字典对象,它包含模型和模型构建验证的状态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.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即可。@DavidModelState.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));
}