我有一个由默认模型Binder绑定的模型。
它根据DataAnnotations.RequiredAttribute
将属性注册为无效
同一模型上的另一个属性有一个setter方法,该方法为该字段派生一个有效值并设置它。
但原始ModelState错误仍然存在。
主要问题:我可以重新评估ModelState吗?
子问题:有更好的解决方案吗?
修改
这是绑定模型的简化示例(对于子问题)
public class Booking
{
public List<Participant> Participants {get;set;}
[Required]
public string MainEmail {get;set;}
private int _mainParticpantIndex;
[Required]
public int MainParticipantIndex
{
get { return _mainParticpantIndex; }
set
{
_mainParticpantIndex= value;
MainEmail = Particpants[value].Email
}
}
}
public class Participant
{
// not required for every participant.
public string Email {get;set;}
[Required]
public string Name {get;set;}
}
答案 0 :(得分:1)
我认为在这种情况下,您应该从Required
中移除MainEmail
,或者甚至根本不能将其设置为可设置。不确定代码的其余部分是如何工作的,但正如我所看到的那样,它总是具有主参与者的电子邮件的价值,这也是必需的。
除非您希望能够覆盖主要电子邮件与主要参与者的不同。在这种情况下,您可能需要修改MainParticipantIndex
修改强>
根据您的评论,您无法使用正常的Required
属性真正做到您想要的。 MVC框架无法知道您希望“必需”流向另一个对象。您必须编写自己的实体级验证,以强制执行您的规则。