在我們的應用程序中,我們有一個Domain層,其中包含用於驗證的DataAnnotations的類。ModelState驗證不與DropDownList和嵌套對象配合使用
我們在我們的ASP.NET MVC UI層的模型中使用了這些類。
例如:
領域層:
public class Company
{
public int Id { get; set; }
[Required]
[StringLength(50)]
public string Description { get; set; }
// ... some model logic abreviated
}
public class Supplier
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
public Company Company { get; set; }
// ... some model logic abreviated
}
在我們的ASP.NET MVC表示層:
public class SupplierEditModel
{
public Supplier Supplier { get; set; }
public IEnumerable<Company> Company { get; set; }
public int SelectedCompany { get; set; }
// ... some model logic abreviated
}
在這種情況下,我們有公司的一個DropDownList的頁面。該名單是有約束力的,像這樣:
@Html.DropDownListFor(m => m.SelectedCompany, new SelectList(Model.Companies, "Id", "Description", Model.SelectedCompany))
我們的問題是我們的控制器的POST方法,當我們正在檢查ModelState.IsValid,該模型是無效的,因爲Supplier.Company爲空。然後,我們可以得到使用SelectedCompany公司,但我們的問題是,這意味着我們不能做這樣的事情:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(SupplierEditModel model)
{
if (ModelState.IsValid)
{
model.CreateSupplier(_supplierService);
return RedirectToAction("Index");
}
return RedirectToAction("Create");
}
我們想創建供應商之前,使用驗證。
您可以從'ModelState'檢查'之前刪除'Company' IsValid':'ModelState.Remove(「Supplier.Company」)'。 – Zabavsky 2013-02-22 15:02:18
@Zabavsky你應該提交這個答案,我會upvote它並可以接受它(取決於其他答案)。 – Gilles 2013-02-22 15:05:25
我發佈它作爲答案。 – Zabavsky 2013-02-22 15:06:40