0

@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 并将其显示在屏幕上?

4

3 回答 3

0

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

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

@When Html.ValidationSummary()执行时,将显示上述消息。

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

于 2013-01-15T12:21:36.350 回答
0

您可以编写一个动作过滤器来检查 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
    }
}
于 2013-01-15T16:56:43.860 回答
0

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

于 2013-01-15T12:30:14.567 回答