在我们的应用程序中,我们有一个域层,其中包含带有用于验证的 DataAnnotations 的类。
我们在 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");
}
我们想在创建供应商之前使用验证。