ModelState.IsValid - 您可以验证模型的一部分吗?

时间:2013-05-24 15:58:57

标签: c# asp.net-mvc entity-framework

我有一个大型视图模型,我将其发送回控制器 - 使用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来查看时髦内容中的每个字段?

1 个答案:

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

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

相关问题