是否有Html.ValidationSummary设置的属性?

时间:2011-07-20 03:04:06

标签: jquery asp.net-mvc

我想知道代码中是否存在Html.ValidationSummary。如果Html.ValidationSummary的参数为true,则html中不存在标记div class="validation-summary-valid"。即Html.ValidationSummary(true),结果,如果Html.ValidationSummary在代码中,则没有可靠的方法知道jquery。

有财产说明了吗?是否存在Html.ValidationSummary

[编辑:澄清]

将Html.ValidationSummary放在参数为true的地方:

@using (Html.BeginForm()) {

    @Html.ValidationSummary(true)   

    <b>Hello</b>

,而不是放任何Html.ValidationSummary:

@using (Html.BeginForm()) {

    <b>Hello</b>

,两个代码都产生相同的HTML(查看页面源):

    <b>Hello</b>

就是这样,jQuery没有可靠的方式来知道代码中是否存在Html.ValidationSummary

2 个答案:

答案 0 :(得分:0)

如果您只是在谈论jQuery,那么您不能这样做:

if ($('.validation-summary-valid').size() > 0)
{
  // Do Something
}

答案 1 :(得分:0)

这种情况正在发生,因为ValidationSummary助手如果没有错误(<div class="validation-summary-errors"/>返回ViewData.ModelState.IsValid时),则不会返回空true。在这种情况下,您需要使用自定义ValidationSummary来修复:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;

namespace System.Web.Mvc
{
    public static class HtmlHelpers
    {
        public static MvcHtmlString CustomValidationSummary(this HtmlHelper helper, string validationMessage = null)
        {

            StringBuilder summary = new StringBuilder();

            summary.Append("<div class=\"validation-summary-errors\">");

            if (helper.ViewData.ModelState.IsValid)
            {
                summary.Append("</div>");

                return new MvcHtmlString(summary.ToString());
            }

            else if (!string.IsNullOrEmpty(validationMessage))
            {
                summary.Append("<ul>");
                summary.AppendFormat("<li>{0}</li>", validationMessage);

                summary.Append("</ul>");
                summary.Append("</div>");

                return new MvcHtmlString(summary.ToString());
            }


            summary.Append("<ul>");

            foreach (KeyValuePair<string, ModelState> state in helper.ViewData.ModelState)
            {
                foreach (ModelError error in state.Value.Errors)
                {
                    summary.AppendFormat("<li>{0}</li>", HttpUtility.HtmlEncode(error.ErrorMessage));
                }

            }

            summary.Append("</ul>");
            summary.Append("</div>");

            return new MvcHtmlString(summary.ToString());
        }
    }
}

即使没有错误,此自定义ValidationSummary帮助器也会生成空validation-summary-errors div,每次都会在您的html中出现其他单词<div class="validation-summary-errors"/>,如您所愿。