私たちのアプリケーションには、検証用の 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 が null であるため、モデルは有効ではありません。その後、SelectedCompany を使用して会社を取得できますが、問題は、次のようなことができないことです。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(SupplierEditModel model)
{
if (ModelState.IsValid)
{
model.CreateSupplier(_supplierService);
return RedirectToAction("Index");
}
return RedirectToAction("Create");
}
サプライヤーを作成する前に検証を使用したいと考えています。