![](/img/trans.png)
[英]ASP.NET Core MVC model validation in viewmodel with base model
[英]ASP.NET Core MVC Bind Viewmodel that contains 2 Domain Model
我正在使用 ASP.NET Core 3.1 MVC Framework 和 Entity Framework Core 開發一個簡單的 Web 應用程序。
我有 2 個域模型: Renter
和Address
,以及一個視圖 model RenterViewModel
:
public class Renter
{
public int Id { get; set; }
[Required]
public Type RenterType { get; set;}
public string CompanyName { get; set;}
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set;}
[Required]
public Address Address {get; set;}
public int AddressId {get; set;}
}
public class Address
{
public Address()
{ }
public int Id { get; set; }
[Required]
public string Street { get; set; }
[Required]
public string StreetNumber { get; set; }
[Required]
public string PostalCode { get; set; }
[Required]
public string City { get; set; }
}
public class RenterViewModel
{
public RenterViewModel(Renter renter, Address address)
{
this.Renter = renter;
this.Address = address;
}
public Renter Renter {get; set;}
public Address Address {get; set;}
}
對於我的索引視圖和詳細信息視圖,這很好用。
如何在 controller 中綁定此視圖Renter
並對其進行驗證,以便先將Address
存儲到數據庫,然后將其存儲到數據庫中?
由於外鍵約束, Renter
需要Address
Id
。
我的RenterController
Create
方法如下所示:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Id,RenterType,CompanyName,FirstName,LastName"), prefix="Renter"] Renter renter,
[Bind("Street, StreetNumber, City, Postalcode"), prefix="Address"] Address address)
{
if (ModelState.IsValid)
{
_context.Add(address);
renter.Address_Id = address.id;
_context.Add(renter);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(new RenterViewModel(renter, address));
}
問題是ModelState.IsValid
總是假的。
我為您創建了示例和表格腳本。 請檢查此 url https://gofile.io/d/yorkiv
我使用scaffold-dbcontext 來生成dbcontext 和模型。
[HttpPost]
public IActionResult Index(Address address, Renter renter)
{
using (var context = new TestDBContext())
{
address.Renter.Add(renter);
context.Add(address);
context.SaveChanges();
}
return View();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.