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

本文关键字:错误 消息 验证 视图 模型 | 更新日期: 2023-09-27 17:51:15

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

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:

以上两个局部视图都在同一个主视图中。当我提交表单时,我应该能够分别验证每个部分。例如:"供应商名称"不能为空。收件人年龄不能为空白等。此外,当发布到动作方法时,每个都应该解析为内容模型类型。这可能吗?还是应该创建两个具有相同成员类型的模型?

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

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

例如:很可能你想添加一个只适用于Supplier而不适用于Receiver的属性。您不希望接收方也收到它,只是让它忽略它。

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

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

就我个人而言,我建议创建2个不同的模型,因为你不必为每个属性类型(例如:日期时间,电子邮件,范围等)重写规则

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;}
}

无论您选择哪种方式,控制器动作都将收集适当的属性。