【问题标题】:ModelState.IsValid - Can you validate part of a modelModelState.IsValid - 你能验证模型的一部分吗
【发布时间】:2013-05-24 15:58:56
【问题描述】:

我有一个大视图模型,我将使用 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 遍历时髦事物中的每个字段?

【问题讨论】:

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


    【解决方案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;
            }
        }
    }
    

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

    【讨论】:

    • 只是为了说明情况。该系统用于呼叫中心网络系统。有人打电话进来,很多字段都被填写了。客户只想要一页。我担心的是用户通过字段获得 90%,然后不小心回击或关闭浏览器。因此,我试图做的是在最终提交之前预先保存数据。我花了几天的时间思考它,我相信我已经想出了一个更好的计划。我将创建一个草稿实体,它只存储创建条目的员工和一个字符串 - 我将在其中放置
    • 表单上数据的 JSON 表示。然后我可以在视图被填充时更新它——而不必担心模型状态。然后,最终提交可以正常创建订单 - 所有模型验证都已到位。
    猜你喜欢
    • 2019-09-06
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多