为什么状态.IsValid在mvc中总是返回false

本文关键字:返回 false mvc 状态 IsValid 为什么 | 更新日期: 2023-09-27 18:03:12

在我的控制器中这个代码:

[HttpPost]
        public ActionResult Edit(Company company, FormCollection IsCostCenters)
        {
            if (ModelState.IsValid)
            {
                Company objNewCompany = new Company();
                //oParty.CostCenters.Clear();
                using (PaymentAdviceEntityContainer db1 = new PaymentAdviceEntityContainer())
                {
                    objNewCompany = db1.Companies.Find(company.Id);
                    objNewCompany.CostCenters.Clear();
                    string[] temp = IsCostCenters["CostCenters"].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var s in temp)
                    {
                        if (s != "false")
                        {
                            CostCenter oCostCenter = new CostCenter();
                            oCostCenter = db1.CostCenters.Find(Convert.ToInt32(s));
                            objNewCompany.CostCenters.Add(oCostCenter);
                        }
                    }
                    db1.SaveChanges();
                }
                db.Entry(company).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            ViewBag.CreatedById = new SelectList(db.Employees, "Id", "FirstName", company.CreatedById);
            return View(company);
        }

我的视图代码如下

@using PaymentAdviceEntity;
@{
    ViewBag.Title = "Edit";
    List<CostCenter> clist = new List<CostCenter>();
    clist = ((List<CostCenter>)ViewBag.CostCenters).ToList();
}

                       <div style="line-height: 22px; width: 100%;height :3%; float: left; ">
                       @{
    foreach (var item in clist)
    {                      
                             <div  style="line-height: 22px; width: 28%; float: left;">
                                                <span class="checkbox">@Html.CheckBox("CostCenters", item.IsChecked, new { @value = item.Id })</span>
                                               <span>@Html.DisplayFor(modelItem => item.Name)</span>
                              </div> 
    }
}

请问ModelState.IsValid在页面发布时间返回false的原因是什么?

为什么状态.IsValid在mvc中总是返回false

请张贴您的模型类别

要检查ModelState中的错误,请使用以下代码:

var errors = ModelState
    .Where(x => x.Value.Errors.Count > 0)
    .Select(x => new { x.Key, x.Value.Errors })
    .ToArray();

或者:也可以使用

var errors = ModelState.Values.SelectMany(v => v.Errors);

在上面的行放置一个断点,看看你的ModelState有什么错误。

正如Brad Wilson在他的回答中所说:

状态。IsValid告诉您是否添加了任何模型错误模型状态。

默认的模型绑定器将为基本类型添加一些错误转换问题(例如,为某物传递非数字)这是一个"int")。您可以更充分地基于无论您使用的是哪种验证系统

尝试使用:-

if (!ModelState.IsValid)
{
    var errors = ModelState.SelectMany(x => x.Value.Errors.Select(z => z.Exception));
    // Breakpoint, Log or examine the list with Exceptions.
}

如果它有助于捕获您的错误。this and this

"ModelState. "IsValid"告诉你,视图(即PaymentAdviceEntity)所使用的模型是否满足所有类型的验证,或者没有在dataannotation的模型属性中指定。

在这段代码中,视图没有绑定任何模型属性。所以如果你把任何数据注释或验证模型(即PaymentAdviceEntity)。那么验证不令人满意。说明模型中的任何属性是否为Name,这使得模型中需要。然后,该属性的值在发布后保持空白。因此模型是无效的(即ModelState)。IsValid返回false)。您需要删除模型级别的验证。