我在注册页面上使用@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并将其显示在屏幕上?
答案 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
}
}