更改,覆盖,替换,asp.net MVC 3默认DataAnnotations有关必需值和无效值的验证消息

时间:2011-10-18 13:55:54

标签: .net asp.net-mvc-3 validation data-annotations

我有:

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创建的值:InvalidPropertyValueCommon_ValueNotValidForProperty,{ {1}}

这些都不起作用。

谢谢!


更新:我也在使用Unobtrusive验证!

2 个答案:

答案 0 :(得分:3)

以下对我来说很好:

型号:

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>
}
Global.asax中的

Application_Start

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

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

    DefaultModelBinder.ResourceClassKey = "Strings";
}

~/App_GlobalResources/Strings.resx内部定义了在输入无效日期时将使用的密钥PropertyValueInvalid。对于该值,您可以使用{0}{1}占位符,这些占位符将分别替换为字段的值和显示名称。

答案 1 :(得分:1)

使用DefaultModelBinder.ResourceClassKey = "Strings";进行绑定验证(forums.asp.net/post/3607981.aspx)和ClientDataTypeModelValidatorProvider.ResourceClassKey = "Strings";进行不显眼的验证。

Strings - 位于App_GlobalResources文件夹(~/App_GlobalResources/Strings.resx)中的资源文件的名称。