Asp.net core mvc 在MVC EF Core中从DbContext创建具有其他对象属性的对象
如果这个问题的答案如此明显,我很抱歉,但是我的谷歌搜索结果(我真的是指所有)都是紫色的,不管我试图围绕我的问题使用什么搜索短语 我试图先用代码构建一个MVC.NETCore3.0应用程序。 我能够创建我的模型,在我的数据库(Azure SQL)中正确设置(我认为),并使用Visual Studio的标准模板创建控制器和视图。因此,我能够单独创建每个模型 我想做的是Asp.net core mvc 在MVC EF Core中从DbContext创建具有其他对象属性的对象,asp.net-core-mvc,entity-framework-core,ef-code-first,Asp.net Core Mvc,Entity Framework Core,Ef Code First,如果这个问题的答案如此明显,我很抱歉,但是我的谷歌搜索结果(我真的是指所有)都是紫色的,不管我试图围绕我的问题使用什么搜索短语 我试图先用代码构建一个MVC.NETCore3.0应用程序。 我能够创建我的模型,在我的数据库(Azure SQL)中正确设置(我认为),并使用Visual Studio的标准模板创建控制器和视图。因此,我能够单独创建每个模型 我想做的是 创建一个视图,从中可以创建租赁对象,并链接到RentalOwner和ParkingSpot (创建一个视图,从中我可以看到创建的所
- 创建一个视图,从中可以创建租赁对象,并链接到RentalOwner和ParkingSpot
- (创建一个视图,从中我可以看到创建的所有租金。这不在本问题的范围内)
public class ParkingSpot
{
public int ParkingSpotId { get; set; }
public int ParkingSpotNumber { get; set; }
}
public class RentalOwner
{
public int RentalOwnerId { get; set; }
public int TenantId { get; set; }
public Tenant Tenant { get; set; }
}
public class Tenant
{
public int TenantId { get; set; }
[Required]
[Display(Name="Navn")]
public string Name { get; set; }
[EmailAddress]
[Required]
public string Email { get; set; }
}
public class Rental
{
public int RentalId { get; set; }
public int ParkingSpotId { get; set; }
public ParkingSpot ParkingSpot { get; set; }
public int RentalOwnerId { get; set; }
public RentalOwner RentalOwner { get; set; }
}
我尝试创建一个ViewModel,用于创建租赁模型和绑定到其他模型
public class RentalCreationView
{
public int Id { get; set; }
public Rental Rental { get; set; }
public int ParkingSpotId { get; set; }
public int TenantId { get; set; }
}
我已经在我的控制器中尝试了这个GET和HttpPost操作
// GET: Rentals/Create
public async Task<IActionResult> CreateAsync()
{
var parkingSpots = await _context.ParkingSpots.ToListAsync();
ViewData["ParkingSpots"] = new SelectList(parkingSpots, "ParkingSpotId", "ParkingSpotNumber");
var tenants = await _context.Tenants.ToListAsync();
ViewData["Tenants"] = new SelectList(tenants, "TenantId", "Name");
return View();
}
public async Task<IActionResult> Create(RentalCreationView rcw)
{
if (ModelState.IsValid)
{
_context.RentalOwners.Add(rcw.Rental.RentalOwner);
_context.Rentals.Add(rcw.Rental);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(rcw);
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(RentalCreationView rcw)
{
List<ParkingSpot> parkingSpots = _context.ParkingSpots.ToList();
List<Tenant> tenants = _context.Tenants.ToList();
RentalOwner ro = new RentalOwner
{
Tenant = tenants.Find(t => t.TenantId == rcw.TenantId),
OwnerSince = rcw.StartDate
};
Rental ren = new Rental
{
StartDate = rcw.StartDate,
ParkingSpot = parkingSpots.Find(ps => ps.ParkingSpotId == rcw.ParkingSpotId),
RentalOwner = ro
};
if (ModelState.IsValid)
{
_context.RentalOwners.Add(ro);
_context.Rentals.Add(ren);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
else
{
var errors = ModelState.Select(x => x.Value.Errors)
.Where(y => y.Count > 0)
.ToList();
}
return View();
}
//获取:租赁/创建
公共异步任务CreateAsync()
{
var parkingSpots=wait_context.parkingSpots.ToListAsync();
ViewData[“ParkingSpots”]=新的选择列表(ParkingSpots、“ParkingSpotId”、“ParkingSpotNumber”);
var tenants=wait_context.tenants.toListSync();
ViewData[“租户”]=新选择列表(租户、“租户”、“名称”);
返回视图();
}
公共异步任务创建(RentalCreationView rcw)
{
if(ModelState.IsValid)
{
_context.RentalOwner.Add(rcw.Rental.RentalOwner);
_context.Rentals.Add(rcw.Rental);
wait_context.SaveChangesAsync();
返回重定向到操作(名称(索引));
}
返回视图(rcw);
}
我不认为我的问题在于我的观点,我想我在我的模型或控制器中遗漏了一些东西。
现在,当我尝试创建租赁时,视图只是在提交后加载几分钟
我看过很多教程,读过数百个问题和文章,我知道我缺少一些基本步骤,但上面的代码就是我现在拥有的(我有大约500行注释掉的代码,不起作用)
我已经花了两周的时间试图学习如何做到这一点,但我需要一些人谁知道我要做的帮助
任何相关的链接、视频或文档都会很棒。。我真的陷得很深。
多谢各位
编辑:我找到了一个解决方案,对于所有从第1000次谷歌搜索中获得此页面的未来读者,我所做的只是在模型中做了一些更改,并在我的控制器中添加了这个HttpPost Create
// GET: Rentals/Create
public async Task<IActionResult> CreateAsync()
{
var parkingSpots = await _context.ParkingSpots.ToListAsync();
ViewData["ParkingSpots"] = new SelectList(parkingSpots, "ParkingSpotId", "ParkingSpotNumber");
var tenants = await _context.Tenants.ToListAsync();
ViewData["Tenants"] = new SelectList(tenants, "TenantId", "Name");
return View();
}
public async Task<IActionResult> Create(RentalCreationView rcw)
{
if (ModelState.IsValid)
{
_context.RentalOwners.Add(rcw.Rental.RentalOwner);
_context.Rentals.Add(rcw.Rental);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(rcw);
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(RentalCreationView rcw)
{
List<ParkingSpot> parkingSpots = _context.ParkingSpots.ToList();
List<Tenant> tenants = _context.Tenants.ToList();
RentalOwner ro = new RentalOwner
{
Tenant = tenants.Find(t => t.TenantId == rcw.TenantId),
OwnerSince = rcw.StartDate
};
Rental ren = new Rental
{
StartDate = rcw.StartDate,
ParkingSpot = parkingSpots.Find(ps => ps.ParkingSpotId == rcw.ParkingSpotId),
RentalOwner = ro
};
if (ModelState.IsValid)
{
_context.RentalOwners.Add(ro);
_context.Rentals.Add(ren);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
else
{
var errors = ModelState.Select(x => x.Value.Errors)
.Where(y => y.Count > 0)
.ToList();
}
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务创建(RentalCreationView rcw)
{
List parkingSpots=_context.parkingSpots.ToList();
列出租户=_context.tenants.ToList();
出租业主ro=新出租业主
{
Tenant=tenants.Find(t=>t.TenantId==rcw.TenantId),
Ownersence=rcw.StartDate
};
租金=新租金
{
起始日期=rcw.StartDate,
ParkingSpot=parkingSpots.Find(ps=>ps.ParkingSpotId==rcw.ParkingSpotId),
出租业主=ro
};
if(ModelState.IsValid)
{
_context.RentalOwners.Add(ro);
_context.Rentals.Add(ren);
wait_context.SaveChangesAsync();
返回重定向到操作(名称(索引));
}
其他的
{
var errors=ModelState.Select(x=>x.Value.errors)
.其中(y=>y.计数>0)
.ToList();
}
返回视图();
}