Сообщение проверки содержит «{PropertyName}» вместо имени свойства - PullRequest
4 голосов
/ 31 января 2011

Я использую свободную проверку с ненавязчивой проверкой на стороне клиента.

 <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 имя реального поля?

1 Ответ

3 голосов
/ 31 января 2011

Работает нормально для меня. Я использую последнюю версию 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_Start в Global.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="" />
...