验证消息包含“{PropertyName}”而不是属性名称

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了验证消息包含“{PropertyName}”而不是属性名称相关的知识,希望对你有一定的参考价值。

我使用流畅的验证与客户端不显眼的验证。

 <fieldset class="edit-root-form">
    <p>
        @html.LabelFor(model => model.Login, UserRes.Login)
        @Html.TextBoxFor(model => model.Login)
        @Html.ValidationMessageFor(model => model.Login)
    </p>         
</fieldset>

流畅的验证规则:

 this.RuleFor(x => x.Login).NotNull().EmailAddress()

我收到如下错误消息:“{PropertyName}”不能为空。

生成html:

<input data-val="true" data-val-regex="&amp;#39;{PropertyName}&amp;#39; is not a valid
email address."  data-val-required="&amp;#39;{PropertyName}&amp;#39; must not be
 empty." id="Login" name="Login" type="text" value="" class="input-validation-error">

为什么MVC不能替换PropertyName真实字段名?

答案

对我来说很好。我使用的是最新的FluentValidation版本(2.0.0.0)和ASP.NET MVC 3 RTM。

模型和验证器:

[Validator(typeof(MyViewModelValidator))]
public class MyViewModel
{
    public string Login { get; set; }
}

public class MyViewModelValidator : AbstractValidator<MyViewModel>
{
    public MyViewModelValidator()
    {
        RuleFor(x => x.Login).NotNull().EmailAddress();
    }
}

控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(new MyViewModel());
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        return View(model);
    }
}

视图:

@model AppName.Models.MyViewModel
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
@using (Html.BeginForm())
{
    @Html.LabelFor(model => model.Login, "Login")
    @Html.TextBoxFor(model => model.Login)
    @Html.ValidationMessageFor(model => model.Login)
    <input type="submit" value="OK" />
}

Application_StartGlobal.asax

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);
    ModelValidatorProviders.Providers.Add(new FluentValidationModelValidatorProvider(new AttributedValidatorFactory()));
}

两种情况:

  1. 将文本框保留为空:显示'Login' must not be empty.验证错误消息。
  2. 键入无效的电子邮件:显示'Login' is not a valid email address.验证错误消息。

最后这里是为文本框生成的HTML:

<input data-val="true" data-val-regex="&amp;#39;Login&amp;#39; is not a valid email address." data-val-regex-pattern="^(?:[w!#$\%&amp;&#39;*+-/=?^`{|}~]+.)*[w!#$\%&amp;&#39;*+-/=?^`{|}~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-](?!.)){0,61}[a-zA-Z0-9]?.)+[a-zA-Z0-9](?:[a-zA-Z0-9-](?!$)){0,61}[a-zA-Z0-9]?)|(?:[(?:(?:[01]?d{1,2}|2[0-4]d|25[0-5]).){3}(?:[01]?d{1,2}|2[0-4]d|25[0-5])]))$" data-val-required="&amp;#39;Login&amp;#39; must not be empty." id="Login" name="Login" type="text" value="" />

以上是关于验证消息包含“{PropertyName}”而不是属性名称的主要内容,如果未能解决你的问题,请参考以下文章

验证文本框是不是仅包含数字

何时更喜欢 JSON 而不是 XML?

Firebase 电话身份验证 OTP 消息模板问题

一次显示验证消息(验证摘要)而不是逐个jqgrid?

SQL Server 连接字符串和身份验证 学习

SQL Server 连接字符串和身份验证详解