我有一个Razor MVC3项目,它在表单中有两个用户记录,一个用于密钥联系,另一个用于备份联系。例如;
public class User
{
[Required(ErrorMessage = "First name is required")]
public string FirstName { get; set; }
}
验证一切正常,除了用户未能填写字段的小问题,它说“需要名字”,但我想指出用户缺少哪个名字字段。例如“需要备份联系人姓名”或“需要密钥联系人名字”。
理想情况下,我希望将[必需]注释保留在类中,因为它在别处使用。
这似乎是一些可能错过并且不容易实现的小案例,但请证明我错了。
赖安
答案 0 :(得分: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; }
}
然后将您的视图模型传递给视图:
@model MySpecialScreenViewModel
...
您的帖子控制器操作将从视图模型中收集属性(或将它们映射到单独的用户模型)并将它们传递给适当的数据处理方法。
答案 1 :(得分:1)
我偶然发现了一个替代方案,只需修改ModelState集合即可。它将具有由index命名的集合中的元素,如“User_0__EmailAddress”,您可以调整/修改/替换与该键关联的Errors集合。
答案 2 :(得分:1)
[Required(ErrorMessage = "{0} is required")]
{0} = DisplayName自动放在其上
样品
[DisplayName("Amount per square meter")]
[Required(ErrorMessage = "{0} is required")]
public int PriceMeter { get; set; }
输出
每平方米的金额是必需的