1

我有一个大视图模型,我将其发送回控制器 - 使用 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)
{
}

我想做的是假设客户姓名、联系电话和电子邮件地址是有效的——将它们保存到数据库中——不管这些时髦的东西是否有效。然后遍历 FunkyThings 列表并检查每个时髦事物的模型状态是否有效,如果有效 - 将其保存到数据库中。

我的问题是....有没有办法可以使用 ModelState.IsValid 来检查每个 FunkyThing 是否独立有效,或者我是否必须使用 IsValidField 遍历时髦事物中的每个字段?

4

1 回答 1

2

如果您想在某些情况下假设您的模型的一部分是有效的,无论它是否有效,为什么不从该属性中删除验证呢?

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

但是,我的问题是,如果模型中的一个字段有效,您将如何保存它?这似乎是一个困难而笨重的设计。我宁愿要么保存完整的模型,要么根本不保存。

于 2013-05-24T16:05:33.483 回答