到现在这应该已经达到了一百万次,但我似乎无法找到任何我喜欢的东西。
请考虑
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Position { get; set; }
}
在我的视图模型中出现两次
public class MyViewModel
{
public Person MainContact { get; set; }
public Person AltContact { get; set; }
}
始终需要主要联系人。不需要替代联系,但如果输入任何内容,则应验证该条目。如果我要有两个不同的Contact类,它们将被描述为:
public class MainContact
{
[Required]
[StringLength(50)]
string FirstName { get; set; }
[Required]
[StringLength(50)]
string LastName { get; set; }
string Position { get; set; }
}
public class AltContact
{
[StringLength(50)]
string FirstName { get; set; }
[StringLength(50)]
string LastName { get; set; }
string Position { get; set; }
}
但是,我不想让2个不同的Contact类具有完全相同的属性。
我希望将一组验证应用于Person类的一个实例,将另一组验证应用于同一Person类的不同实例。该解决方案还必须使用不显眼的js打开客户端验证。
更新1 :为人员和联系人类添加了字符串位置。
更新2 :谢谢大家的投入。考虑到时间限制和旧的UI要求,我最终得到了2个单独的类。但是,我个人喜欢以下评论中的Erik Funkenbusch的替代方法。如果我将来遇到类似的情况,我会推送对象列表和"添加新的Bla"按钮解决方案我认为这是最佳选择。
答案 0 :(得分:0)
由于Null属性的答案似乎不适合你,我建议使用以下模型:
public class MainContact: BaseContact
{
[Required]
[StringLength(50)]
public override string FirstName { get; set; }
[Required]
[StringLength(50)]
public override string LastName { get; set; }
}
public class BaseContact
{
[StringLength(50)]
public virtual string FirstName { get; set; }
[StringLength(50)]
public virtual string LastName { get; set; }
string Position { get; set; }
}
然后像这样制作MainModel:
public class MyViewModel
{
[Required]
public MainContact MainContact { get; set; }
public BaseContact AltContact { get; set; }
}
你仍然需要有两个不同的模型,但是你可以通过继承来共享共同的元素。