gpt4 book ai didi

asp.net-mvc - 如何在模型中重用类而不对所有类都使用验证

转载 作者:行者123 更新时间:2023-12-04 16:09:07 25 4
gpt4 key购买 nike

我有通用的联系模型

public class Contact
{
public string Title { get; set; }

public string FirstName { get; set; }

[Required(ErrorMessage = "Please enter LastName")]
public string LastName { get; set; }

[Required(ErrorMessage = "Please enter Email")]
public string Email { get; set; }

public string Phone { get; set; }
}

现在我想在两个模型中使用我的联系人类但只在第二个应用验证?
      public class Step1Model{
public Contact Contact{get;set;}
}

public class Step2Model{
[Requried]
public Contact Contact{get;set;}
}

我如何使它工作?

最佳答案

我在这里看到两个选项:

1 - 接口(interface)的代码将要求您基于 ContactInterface 创建一个 ContactRequired 类和一个 ContactOptional 类。我相信这将允许您拥有一个 StepModel,您可以在其中将 StepModel.Contact 属性设置为新的 ContactRequired() 或新的 ContactOption()。然后,当为 StepModel 运行验证时,它将基于您为 StepModel.Contact 属性设置的类的类型。

    public interface ContactInterface
{
string Title { get; set; }
string FirstName { get; set; }
string LastName { get; set; }
string Email { get; set; }
string Phone { get; set; }
}
public class ContactOptional : ContactInterface
{
public string Title { get; set; }

public string FirstName { get; set; }

public string LastName { get; set; }

public string Email { get; set; }

public string Phone { get; set; }
}
public class ContactRequired : ContactInterface
{
public string Title { get; set; }

public string FirstName { get; set; }

[Required(ErrorMessage = "Please enter LastName")]
public string LastName { get; set; }

[Required(ErrorMessage = "Please enter Email")]
public string Email { get; set; }

public string Phone { get; set; }
}
public class StepModel
{
public ContactInterface Contact { get; set; }
}

用法:
    StepModel smTest = new StepModel();
ContactRequired crContact = new ContactRequired();
ContactOptional coContact = new ContactOptional();
List<ValidationResult> lErrors = new List<ValidationResult>();

smTest.Contact = coContact;
//Validate Option
if (Validator.TryValidateObject(smTest, new ValidationContext(smTest, serviceProvider: null, items: null), lErrors, true))
{
//Code should reach this as the model should be valid;
}

smTest.Contact = crContact;
//Validate Required
if (Validator.TryValidateObject(smTest, new ValidationContext(smTest, serviceProvider: null, items: null), lErrors, true))
{
//Code should not reach this as the model should be invalid;
}

2 - 创建一个自定义的 required 属性,它将查看 Contact 模型的另一个属性(例如 bool UseValidation),以确定是否应该进行所需的验证,或者它是否应该简单地返回 true 作为默认值。我最初并没有为此选项提供代码,因为您需要为您的类中的每种类型的验证属性提供一个自定义属性。另外,我认为选项 1 是更好的选项,除非您有特定的反对理由。

关于asp.net-mvc - 如何在模型中重用类而不对所有类都使用验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27707503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com