在我的控制器中这段代码:
[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是什么原因......
答案 0 :(得分:127)
请发布模型类。
要检查ModelState
中的错误,请使用以下代码:
var errors = ModelState
.Where(x => x.Value.Errors.Count > 0)
.Select(x => new { x.Key, x.Value.Errors })
.ToArray();
OR:您也可以使用
var errors = ModelState.Values.SelectMany(v => v.Errors);
在上一行放置一个断点,看看ModelState
中的错误是什么。
答案 1 :(得分:13)
正如布拉德·威尔逊在his answer here中所述:
ModelState.IsValid告诉您是否添加了任何模型错误 的ModelState。
默认模型绑定器将为基本类型添加一些错误 转换问题(例如,传递非数字的东西 这是一个“int”)。您可以基于更完整地填充ModelState 无论你使用什么验证系统。
尝试使用: -
if (!ModelState.IsValid)
{
var errors = ModelState.SelectMany(x => x.Value.Errors.Select(z => z.Exception));
// Breakpoint, Log or examine the list with Exceptions.
}
如果它有助于抓住您的错误。 Courtesy this和this
答案 2 :(得分:4)
“ModelState.IsValid”告诉您视图使用的模型(即PaymentAdviceEntity)满足所有类型的验证,或者DataAnotation在模型属性中未指定。
在此代码中,视图不绑定任何模型属性。 因此,如果您在模型中放置任何DataAnotations或验证(即PaymentAdviceEntity)。然后验证不满足。 假设模型中的任何属性是在模型中需要的名称。然后在post之后属性的值保持空白。因此模型无效(即ModelState.IsValid返回false)。 您需要删除模型级别验证。