相同模型具有不同验证错误消息的不同视图

时间:2014-03-20 16:40:12

标签: c# asp.net-mvc asp.net-mvc-4

我有一个包含以下内容的模型

public class Content
{

public string Name{get;set;}
public string Age{get;set;}

}

现在我有两个观点。

View 1: Supplier

Textbox for Supplier Name:
TextBox for Supplier Age:

View2: Receiver
TextBox for Receiver Name:
Textbox for Receiver Age:

以上两个部分视图都在单一形式的同一主视图中。当我提交表格时,我应该能够分别验证每个部分。例如供应商名称不能为空。接收者年龄不能为空白等。当发布到Action Method时,每个都应解析为Content model type。有可能吗?或者我应该创建两个具有相同类型成员的模型?

2 个答案:

答案 0 :(得分:0)

虽然对象具有相同的属性,但上下文不同。我建议创建两个单独的模型。

例如:您可能希望添加仅适用于供应商但不适用于Receiver的属性。你不希望接收器也得到它,只是让它忽略它。

答案 1 :(得分:0)

MVC必需验证不支持属性的多错误消息     然而。因此,如果您想重新使用Content类并为Name和Age获取不同的错误消息,除非您像这样http://www.codeproject.com/Articles/275056/Custom-Client-Side-Validation-in-ASP-NET-MVC进行自定义客户端验证,否则还没有办法。

在此方法中,您可以显示您喜欢的任何错误消息。但是,如果禁用js,您将从服务器获取原始错误消息。

就个人而言,我建议创建2个不同的模型,因为您不必为每种属性类型重写规则(例如:datetime,email,range等)。

public class SupplierModel
{
    [Required(ErrorMessage = "Supplier Name cannot be blank")]
    public string Name {get; set;}

    [Required(ErrorMessage = "Supplier Age cannot be blank")]
    public string Age {get; set;}
}

public class ReceiverModel
{
    [Required(ErrorMessage = "Receiver Name cannot be blank")]
    public string Name {get; set;}

    [Required(ErrorMessage = "Receiver Age cannot be blank")]
    public string Age {get; set;}
}

无论您采用哪种方式,控制器操作都将收集相应的属性。