Я работаю над простым веб-приложением с ASP. NET Core 3.1 MVC Framework и Entity Framework Core.
У меня есть 2 модели домена: Renter
и Address
, и модель представления 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;}
}
Для моего представления индекса и представления подробностей это работает нормально.
Как я могу связать эту модель представления в контроллере и проверить ее, чтобы чтобы сначала сохранить Address
в базе данных, а затем Renter
в базу данных?
Renter
требуется Id
из Address
из-за ограничения внешнего ключа.
Мой 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
всегда ложно.