在ValidationMessageFor Block中显示服务器端验证消息

时间:2013-05-15 03:12:57

标签: c# asp.net-mvc razor

我正在使用标准MVC成员身份验证的变体。

鉴于我的模型有:

    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

视图有:

<div class="form-field">
    @Html.EditorFor(m => m.UserName)
    @Html.ValidationMessageFor(m => m.UserName)
</div>

如果我选择了用户名字段,则验证消息会正确显示“需要用户名字段。”。

我需要的是,如果用户输入的用户名无法在ActionResult中执行进一步的验证,我想显示自定义验证消息。

一个例子可能是用户输入了已登录系统的用户名(只能在提交时检查),因此ValidationMessage应显示“用户已通过工作站xyz登录”等内容。

我想在Razor MVC 4中使用CustomValidationAttribute的一个很好的例子是最好的,因为我相信这是唯一可行的方法。唯一的问题是,这似乎是客户端验证。就我而言,我只想要服务器端。

1 个答案:

答案 0 :(得分:2)

进一步的搜索显示我正在咆哮错误的树。对于自定义服务器端验证消息,只需执行以下操作:

if (result.AlreadyLoggedIn)
{
  ModelState.AddModelError("UserName", String.Format("User already logged in via workstation {0}", result.WorkstationName));
}