如何扩展Html.ValidationMessage以便我可以将图像包含为错误?

Luk*_*uke 3 .net validation asp.net-mvc

我想减少以下代码.以下代码有效,但不是很整洁等.

    <label for="Name">Name:</label><%= Html.TextBox("Name")%><% 
    if (!string.IsNullOrEmpty(Html.ValidationMessage("Name"))) {
        string Error = HtmlRemoval.StripTags(Html.ValidationMessage("Name")); %>
        <img src="Error.gif" alt="Error" title="<%= Error %>" /><%
    }
    %>
Run Code Online (Sandbox Code Playgroud)

我已经读过我需要扩展Html帮助器,以便我可以返回一个图像而不是包含默认元素和文本错误的文本.

我似乎无法找到关于如何实现这一目标的任何文章或一般性建议.我仍然是ASP.NET MVC的新手.任何建议将不胜感激.

Dav*_*enn 13

您可以扩展HtmlHelper,如:

public static class CustomHtmlHelper {

  public static string ValidationImage(this HtmlHelper helper, string name) {
    if (helper.ViewData.ModelState[name] == null || helper.ViewData.ModelState[name].Errors == null) {
      return String.Empty;
    }
    TagBuilder tag = new TagBuilder("img");
    tag.Attributes.Add("src", "Error.gif");
    tag.Attributes.Add("alt", "Error");
    tag.Attributes.Add("title", helper.ViewData.ModelState[name].Errors[0].ErrorMessage);
    return tag.ToString(TagRenderMode.SelfClosing);
  }

}
Run Code Online (Sandbox Code Playgroud)

然后在您的页面中导入包含扩展方法的类

<%@ Import Namespace="CustomHtmlHelperNamespace" %>
Run Code Online (Sandbox Code Playgroud)

然后将以下内容添加到您的页面:

<label for="Name">Name:</label>
<%= Html.TextBox("Name")%>
<% Html.ValidationImage("Name") %>
Run Code Online (Sandbox Code Playgroud)

欲了解更多关于扩展的HtmlHelper尝试在这里,但基本上这个扩展的HtmlHelper,检查的ViewState有关在名称解析("名称"你的情况)的值错误,如果它包含一个错误生成需要的渲染图像的HTML.图像的title属性将包含字段"Name"的验证消息