Html.EditorFor验证消息

时间:2010-02-24 16:10:05

标签: asp.net-mvc

当使用Html.EditorFor并传入我的ViewModel时,可能不会让每个单独的表单元素显示错误消息。

我正在使用验证摘要,因此错误消息会显示两次。一次为表单元素,然后再在摘要中。

2 个答案:

答案 0 :(得分:0)

您可以通过使用“*”从ValidationMessage中删除错误消息来删除单个错误,如下例所示。但是,如果您传递了错误消息,则会显示该消息。

<%= Html.ValidationMessage("PropertyName", "*") %>

如果您传递了错误消息,则会显示该消息。对于编辑器模板或使用新的lambda版本的Html.Helper也是如此,如下所示

Html.ValidationMessageFor(m=>m.prop,...)

希望有所帮助,

涡流

答案 1 :(得分:0)

您可以创建自定义验证摘要并使用特殊键添加所有错误(在此示例中我使用_FORM。例如:

        private const string VALIDATIONSUMMARY_HMTL = "<div class=\"input-validation-error\">{0}</div>";

public static string ValidationSummary(this HtmlHelper helper, bool customErrorOnly)
    {
        return ValidationSummary(helper, customErrorOnly, "_FORM");   
    }

    public static string ValidationSummary(this HtmlHelper helper, bool customErrorOnly, string errorName)
    {
        if (helper.ViewData.ModelState.IsValid)
        {
            return null;
        }

        string list = "<ul>";
        bool displayList = false;
        foreach (KeyValuePair<string, ModelState> pair in helper.ViewData.ModelState)
        {
            foreach (ModelError error in pair.Value.Errors)
            {
                if (pair.Key.ToUpper() == "_FORM" || !customErrorOnly)
                {
                    list += "<li>" + error.ErrorMessage + "</li>";
                    displayList = true;
                }
            }
        }
        list += "</ul>";

        if (!displayList)
        {
            return null;
        }

        return string.Format(VALIDATIONSUMMARY_HMTL, list);
    }

如果要添加特定错误:

ViewData.ModelState.AddModelError("_FORM", "My error message");