我有一个大型视图模型,我将其发送回控制器 - 使用AJAX帖子。 该模型看起来像这样:
public class FunkyThingsOrder
{
[Required]
public int id{get;set;}
[Required]
public string CustomerName{get;set;}
[Required]
public string ContactNumber{get;set;}
[Required]
public string EmailAddress{get;set;}
public List<FunkyThing>{get;set;}
public List<Freebies>{get;set;}
}
public class FunkyThing
{
[Required]
public int id{get;set;}
[Required]
public string Name{get;set;]
[Required]
public int FunkienessLevel{get;set;}
[Required]
public int QuantityOrdered{get;set;}
}
现在想象我有一个控制器动作
ActionResult CreateOrUpdateFunkyThingsOrder(FunkyThingsOrder orderToCreateOrUpdate)
{
}
我希望能够做到的是假设customerName,联系号码和电子邮件地址有效 - 将它们保存到数据库中 - 无论这些功能是否有效。然后遍历FunkyThings列表并检查每个时髦事物的模型状态是否有效,如果是 - 将其保存到数据库中。
我的问题是......有没有办法可以使用ModelState.IsValid来检查每个FunkyThing是否独立有效,还是我必须使用IsValidField来查看时髦内容中的每个字段?
答案 0 :(得分:1)
如果您想在某些情况下假设模型的某些部分有效,无论是否有效,为什么不从该属性中删除验证?
RemoveValidationError("FunkyThingsOrder.CustomerName");
RemoveValidationError("FunkyThingsOrder.ContactNumber");
RemoveValidationError("FunkyThingsOrder.EmailAddress");
protected void RemoveValidationError(string name)
{
for (var i = 0; i < ModelState.Keys.Count; i++)
{
if (ModelState.Keys.ElementAt(i) == name &&
ModelState.Values.ElementAt(i).Errors.Count > 0)
{
ModelState.Values.ElementAt(i).Errors.Clear();
break;
}
}
}
然而,我的问题是,如果模型中的某个字段有效,您将如何只保存一个字段?这似乎是一个困难和笨重的设计。我宁愿保存完整的模型或根本不保存。