如何向MVC3中的同一对象的实例显示不同的Required消息?

Rya*_*ill 10 validation asp.net-mvc-3

我有一个Razor MVC3项目,它在表单中有两个用户记录,一个用于密钥联系,一个用于备份联系.例如;

public class User
{
    [Required(ErrorMessage = "First name is required")]
    public string FirstName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

验证一切运作良好,除了在用户不填写字段中的小问题,它说:"首先名称是必需的",但我想指出的用户名字段之一是缺少哪个.例如"需要备份联系人名字"或"需要密钥联系人名字".

理想情况下,我希望将[Required]注释保留在类中,因为它在其他地方使用.

这似乎是可能错过并且不容易实现的那些小案例之一,但请证明我错了.

瑞安

Rob*_*vus 19

实现此目的的一种方法是使用此屏幕的单独视图模型,而不是包含所有错误消息的单个用户模型.在新的视图模型中,您可以拥有BackupContactFirstName属性,KeyContactFirstName属性等,每个属性都有其单独的错误消息.(或者,此视图模型可以包含单独的用户模型作为属性,但我发现Microsoft的客户端验证不适用于复杂模型并且更喜欢平面属性).

您的视图模型如下所示:

public class MySpecialScreenViewModel
{
    [Required(ErrorMessage = "Backup contact first name is required")]
    public string BackupContactFirstName { get; set; }


    [Required(ErrorMessage = "Key contact first name is required")]
    public string KeyContactFirstName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后将视图模型传递给视图,如下所示:

@model MySpecialScreenViewModel
...
Run Code Online (Sandbox Code Playgroud)

您的post控制器操作将从视图模型中收集属性(或将它们映射到单独的User模型)并将它们传递给适当的数据处理方法.