如何查看将使用@ Html.ValidationSummary()显示的文本然后修改消息?

时间:2013-01-15 12:15:18

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我在注册页面上使用@Html.ValidationSummary()。如果输入的用户名已被使用,我会收到以下消息HTML:

<div class="validation-summary-errors" data-valmsg-summary="true">
   <ul>
      <li>User name already exists. Please enter a different user name.</li>
   </ul>

我想要的是能够使用几行HTML修改此消息,以便如果消息与上面的内容完全相同,那么我将添加一些显示登录链接的HTML。像这样:

<div class="validation-summary-errors" data-valmsg-summary="true">
   <ul>
      <li>User name already exists. Please enter a different user name or <a xxxx>Login</a></li>
  </ul>
</div>

我尝试做类似以下的事情:

@{
   var errorHTML = @Html.ValidationSummary();
   if ( errorHTML.IndexOf("User name already exists") > 0  ) {
        errorHTML = errorHTML + "xx"
   }                    
}

然而,我马上遇到了一个问题,它告诉我MvsHtmlString不包含IndexOf的定义。

有人可以建议一种方法,我可以查看是否会有验证消息说用户名已经存在,然后添加一些HTML并将其显示在屏幕上?

3 个答案:

答案 0 :(得分:0)

控制显示验证错误的错误消息的一种方法是使用ModelState.AddModelError()方法

ModelState.AddModelError("UserName", "User name already exists. Please enter a different user name or a xxxx");

执行

@When Html.ValidationSummary(),将显示上述信息。

但是,我不知道当前消息是如何包含在摘要中的,以及您是否可以控制它。换句话说,该消息来自哪里?

答案 1 :(得分:0)

您可以编写自定义验证摘要。然后使用Html.ValidationSummary()获取MvcHtmlString并更改消息。 以下是有关如何创建自定义验证摘要扩展的一些有用链接: Custom ValidationSummary template Asp.net MVC 3 How to extend the ValidationSummary HTML Helper in ASP.NET MVC?

答案 2 :(得分:0)

您可以编写一个Action Filter,它将检查ModelState中是否有与您要查找的条目匹配的条目,然后修改它或将其删除。然后你只能用过滤器装饰你想要的动作:

[RemoveModelStateEntry(MatchOn = "Username already exists.")]
public ActionResult Index()
{
    return View();
}

执行操作时以及执行操作之前,您可以检查模型状态:

public class RemoveModelStateEntryAttribute : IActionFilter
{
    public void OnActionExecuted(ActionExecutedContext filterContext)
    {
        // check filterContext.Controller.ViewData.ModelState here
    }

    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // nothing to do here
    }
}