Изменить, переопределить, заменить, asp.net MVC 3 по умолчанию DataAnnotations Сообщения проверки для обязательных и недопустимых значений - PullRequest
3 голосов
/ 18 октября 2011

у меня есть:

public class StudentDto
{
    [Display(Name = "Data de Nascimento")]
    public DateTime? Born { get; set; }
}

Я использую jQuery datepicker, и всякий раз, когда я добавляю неверные данные, появляется сообщение для проверки: Пожалуйста, введите действительную дату.

Как я могу изменить это сообщение по умолчанию?

Я уже пробовал использовать:

[DataType(DataType.Date, ErrorMessage = @"Valor inválido")]

Я уже пытался создать .resx и использовать DefaultModelBinder.ResourceClassKey = "Strings";, и на моих .resx созданных значениях для: InvalidPropertyValue, Common_ValueNotValidForProperty, PropertyValueInvalid

Ничего из этого не сработало.

Спасибо!


Обновление: я тоже использую ненавязчивую проверку!

Ответы [ 2 ]

3 голосов
/ 18 октября 2011

У меня нормально работает:

Модель:

public class StudentDto
{
    [Display(Name = "Data de Nascimento")]
    [Required(ErrorMessage = "Some custom message for required date")]  
    public DateTime? Born { get; set; }
}

Контроллер:

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

    [HttpPost]
    public ActionResult Index(StudentDto dto)
    {
        return View(dto);
    }
}

Вид:

<script type="text/javascript">
    $(function () {
        $('#Born').datepicker();
    });
</script>

@using (Html.BeginForm())
{
    @Html.LabelFor(x => x.Born)
    @Html.EditorFor(x => x.Born)
    @Html.ValidationMessageFor(x => x.Born)
    <button type="submit">OK</button>
}

Application_Start в Global.asax:

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

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);

    DefaultModelBinder.ResourceClassKey = "Strings";
}

и внутри ~/App_GlobalResources/Strings.resx определяют ключ PropertyValueInvalid, который будет использоваться при вводе недопустимой даты. В качестве значения можно использовать заполнители {0} и {1}, которые будут соответственно заменены значением и отображаемым именем поля.

1 голос
/ 21 сентября 2012

Используйте DefaultModelBinder.ResourceClassKey = "Strings"; для проверки привязки ( forums.asp.net / post / 3607981.aspx ) и ClientDataTypeModelValidatorProvider.ResourceClassKey = "Strings"; для ненавязчивой проверки.

Strings - имя файла ресурса, расположенного в папке App_GlobalResources (~/App_GlobalResources/Strings.resx).

...