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

本文关键字:服务器端 验证 消息 显示 ValidationMessageFor | 更新日期: 2023-09-27 18:13:51

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

假设我的模型有:

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

View有:

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

如果我关闭用户名字段,验证消息正确地显示" the user name field is required."

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

一个例子可能是用户输入了一个已经登录到系统的用户名(只在提交时检查),所以ValidationMessage应该显示类似于"用户已经通过工作站xyz登录"的内容。

我想在Razor MVC 4中使用CustomValidationAttribute的一个好例子将是最好的,因为我相信这是唯一可以工作的方式。唯一的问题是,这似乎是为了客户端验证。在我的例子中,我只需要服务器端

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

稍作搜索后,我发现自己找错了对象。对于自定义服务器端验证消息,只需执行以下操作:

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