簡體   English   中英

ASP.NET 核心 MVC 綁定包含 2 個域的視圖模型 Model

[英]ASP.NET Core MVC Bind Viewmodel that contains 2 Domain Model

我正在使用 ASP.NET Core 3.1 MVC Framework 和 Entity Framework Core 開發一個簡單的 Web 應用程序。

我有 2 個域模型: RenterAddress ,以及一個視圖 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 和模型。

家庭控制器.cs

[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM