protected void ValidateModelState()
 {
     if (!ModelState.IsValid)
     {
         ModelErrorCollection modelErrorList = ModelState.Select(x => x.Value.Errors).Where(y => y.Count > 0).FirstOrDefault();
         ModelError           modelError     = modelErrorList?.FirstOrDefault();
         if (modelError != null)
         {
             throw modelError.Exception;
         }
     }
 }
Esempio n. 2
0
        /// <summary>
        ///     根据指定的属性名或模型对象的名称,从模型错误中显示一个错误信息对应的HTML标记。
        /// </summary>
        /// <param name="helper">HTML帮助器实例。</param>
        /// <param name="modelName">所验证的属性或模型对象的名称。</param>
        /// <param name="htmlAttributes">包含元素 HTML 特性的对象。</param>
        /// <returns></returns>
        public static MvcHtmlString PropertyValidationMessage(this HtmlHelper helper, string modelName,
                                                              object htmlAttributes)
        {
            modelName = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(modelName);
            if (!helper.ViewData.ModelState.ContainsKey(modelName))
            {
                return(null);
            }

            ModelState           modelState  = helper.ViewData.ModelState[modelName];
            ModelErrorCollection modelErrors = (modelState == null) ? null : modelState.Errors;
            ModelError           modelError  = (((modelErrors == null) || (modelErrors.Count == 0)) ? null : modelErrors.FirstOrDefault(m => !String.IsNullOrEmpty(m.ErrorMessage)) ?? modelErrors[0]);

            if (modelError == null)
            {
                return(null);
            }

            TagBuilder builder = new TagBuilder("label");

            builder.MergeAttributes(HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
            builder.AddCssClass("error");
            builder.MergeAttribute("id", $"{modelName}-error");
            builder.MergeAttribute("for", modelName);

            var iTag = new TagBuilder("i");

            iTag.AddCssClass("fa fa-times-circle");

            builder.InnerHtml = iTag.ToString(TagRenderMode.Normal) + GetUserErrorMessageOrDefault(helper.ViewContext.HttpContext, modelError, modelState);
            return(new MvcHtmlString(builder.ToString(TagRenderMode.Normal)));
        }
Esempio n. 3
0
        private static MvcHtmlString ValidationMessageHelper(this HtmlHelper htmlHelper, ModelMetadata modelMetadata, string expression, string validationMessage, IDictionary <string, object> htmlAttributes, string tag)
        {
            string      modelName   = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(expression);
            FormContext formContext = htmlHelper.ViewContext.GetFormContextForClientValidation();

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

            ModelState           modelState  = htmlHelper.ViewData.ModelState[modelName];
            ModelErrorCollection modelErrors = (modelState == null) ? null : modelState.Errors;
            ModelError           modelError  = (((modelErrors == null) || (modelErrors.Count == 0)) ? null : modelErrors.FirstOrDefault(m => !String.IsNullOrEmpty(m.ErrorMessage)) ?? modelErrors[0]);

            if (modelError == null && formContext == null)
            {
                return(null);
            }

            if (String.IsNullOrEmpty(tag))
            {
                tag = htmlHelper.ViewContext.ValidationMessageElement;
            }

            TagBuilder builder = new TagBuilder(tag);

            builder.MergeAttributes(htmlAttributes);
            builder.AddCssClass((modelError != null) ? HtmlHelper.ValidationMessageCssClassName : HtmlHelper.ValidationMessageValidCssClassName);

            if (!String.IsNullOrEmpty(validationMessage))
            {
                builder.SetInnerText(validationMessage);
            }
            else if (modelError != null)
            {
                builder.SetInnerText(GetUserErrorMessageOrDefault(htmlHelper.ViewContext.HttpContext, modelError, modelState));
            }

            if (formContext != null)
            {
                bool replaceValidationMessageContents = String.IsNullOrEmpty(validationMessage);

                if (htmlHelper.ViewContext.UnobtrusiveJavaScriptEnabled)
                {
                    builder.MergeAttribute("data-valmsg-for", modelName);
                    builder.MergeAttribute("data-valmsg-replace", replaceValidationMessageContents.ToString().ToLowerInvariant());
                }
                else
                {
                    FieldValidationMetadata fieldMetadata = ApplyFieldValidationMetadata(htmlHelper, modelMetadata, modelName);
                    // rules will already have been written to the metadata object
                    fieldMetadata.ReplaceValidationMessageContents = replaceValidationMessageContents; // only replace contents if no explicit message was specified

                    // client validation always requires an ID
                    builder.GenerateId(modelName + "_validationMessage");
                    fieldMetadata.ValidationMessageId = builder.Attributes["id"];
                }
            }

            return(builder.ToMvcHtmlString(TagRenderMode.Normal));
        }
        public static MvcHtmlString ValidationMessageCustom(this HtmlHelper htmlHelper, string modelName)
        {
            //<span class="text-danger field-validation-error" data-valmsg-for="@field.Name" data-valmsg-replace="true">
            //@if(!ViewData.ModelState.IsValid && ViewData.ModelState[field.Name] != null && ViewData.ModelState[field.Name].Errors.Count > 0)
            //{
            //    <span for= "@field.Name" class="">@ViewData.ModelState[field.Name].Errors.First().ErrorMessage</span>
            //}
            //</span>

            TagBuilder builder = new TagBuilder("span");

            builder.AddCssClass("text-danger");
            builder.AddCssClass("field-validation-error");

            builder.Attributes.Add("data-valmsg-for", modelName);
            builder.Attributes.Add("data-valmsg-replace", "true");

            ModelState           modelState  = htmlHelper.ViewData.ModelState[modelName];
            ModelErrorCollection modelErrors = (modelState == null) ? null : modelState.Errors;
            ModelError           modelError  = (((modelErrors == null) || (modelErrors.Count == 0)) ? null : modelErrors.FirstOrDefault(m => !String.IsNullOrEmpty(m.ErrorMessage)) ?? modelErrors[0]);

            if (htmlHelper.ViewData.ModelState.IsValid && modelError != null)
            {
                TagBuilder errorMessageSpan = new TagBuilder("span");
                errorMessageSpan.Attributes.Add("for", modelName);
                errorMessageSpan.SetInnerText(modelError.ErrorMessage);
                builder.InnerHtml = errorMessageSpan.ToString();
            }

            return(MvcHtmlString.Create(builder.ToString(TagRenderMode.Normal)));
        }
        private static MvcHtmlString CollectionValidationMessageHelper(this HtmlHelper htmlHelper, ModelMetadata modelMetadata, string expression, IDictionary <string, object> htmlAttributes, string tag)
        {
            bool   isClientSideValidationEnabled = htmlHelper.ViewContext.ClientValidationEnabled;
            string propertyName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(expression);

            if (!htmlHelper.ViewData.ModelState.ContainsKey(propertyName) && !isClientSideValidationEnabled)
            {
                return(null);
            }
            ModelState           modelState  = htmlHelper.ViewData.ModelState[propertyName];
            ModelErrorCollection modelErrors = (modelState == null) ? null : modelState.Errors;
            ModelError           modelError  = (((modelErrors == null) || (modelErrors.Count == 0)) ? null : modelErrors.FirstOrDefault(m => !String.IsNullOrEmpty(m.ErrorMessage)) ?? modelErrors[0]);

            if (modelError == null && !isClientSideValidationEnabled)
            {
                return(null);
            }
            if (String.IsNullOrEmpty(tag))
            {
                tag = "span";
            }
            TagBuilder html = new TagBuilder(tag);

            html.MergeAttributes(htmlAttributes);
            html.AddCssClass((modelError != null) ? HtmlHelper.ValidationMessageCssClassName : HtmlHelper.ValidationMessageValidCssClassName);
            if (modelError != null)
            {
                html.InnerHtml = modelError.ErrorMessage;
            }
            if (isClientSideValidationEnabled)
            {
                Dictionary <string, object> validationAttributes = GetValidationAttributes(modelMetadata);
                html.MergeAttributes(validationAttributes);
                html.MergeAttribute("data-col-message-for", propertyName);
            }
            return(MvcHtmlString.Create(html.ToString()));
        }
Esempio n. 6
0
        private static MvcHtmlString ExtendedValidationMessageHelper(this HtmlHelper htmlHelper,
                                                                     ModelMetadata modelMetadata,
                                                                     string expression, string validationMessage,
                                                                     IDictionary <string, object> htmlAttributes)
        {
            var mvcHtmlString = ValidationMessageHelper(htmlHelper, modelMetadata, expression, validationMessage,
                                                        htmlAttributes);

            string      modelName   = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(expression);
            FormContext formContext = GetFormContextForClientValidation(htmlHelper.ViewContext);

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

            ModelState           modelState         = htmlHelper.ViewData.ModelState[modelName];
            var                  extendedModelState = modelState as ExtendedModelState;
            ModelErrorCollection modelWarnings      = null;

            if (extendedModelState == null)
            {
                return(mvcHtmlString);
            }
            modelWarnings = extendedModelState.Warnings;
            ModelError modelWarning = (((modelWarnings == null) || (modelWarnings.Count == 0))
                                           ? null
                                           : modelWarnings.FirstOrDefault(m => !String.IsNullOrEmpty(m.ErrorMessage)) ??
                                       modelWarnings[0]);

            if (modelWarning == null)
            {
                return(mvcHtmlString);
            }

            var builder = new TagBuilder("span");

            builder.MergeAttributes(htmlAttributes);
            builder.AddCssClass(modelWarning != null
                                    ? HtmlHelpers.ValidationSummaryWarningCssClassName
                                    : HtmlHelper.ValidationMessageValidCssClassName);

            builder.SetInnerText(GetUserErrorMessageOrDefault(htmlHelper.ViewContext.HttpContext, modelWarning, modelState));

            if (formContext != null)
            {
                bool replaceValidationMessageContents = String.IsNullOrEmpty(validationMessage);

                if (htmlHelper.ViewContext.UnobtrusiveJavaScriptEnabled)
                {
                    builder.MergeAttribute("data-valmsg-for", modelName);
                    builder.MergeAttribute("data-valmsg-replace",
                                           replaceValidationMessageContents.ToString().ToLowerInvariant());
                }
                else
                {
                    FieldValidationMetadata fieldMetadata = ApplyFieldValidationMetadata(htmlHelper, modelMetadata,
                                                                                         modelName);
                    // rules will already have been written to the metadata object
                    fieldMetadata.ReplaceValidationMessageContents = replaceValidationMessageContents;
                    // only replace contents if no explicit message was specified

                    // client validation always requires an ID
                    builder.GenerateId(modelName + "_validationMessage");
                    fieldMetadata.ValidationMessageId = builder.Attributes["id"];
                }
            }

            var mvcHtmlStringWithWarning =
                MvcHtmlString.Create((mvcHtmlString == null ? string.Empty : mvcHtmlString.ToHtmlString()) +
                                     builder.ToString(TagRenderMode.Normal));

            return(mvcHtmlStringWithWarning);
        }