if-statement - 如果块没有被执行
问题描述
我正在使用 .net 核心创建一个汽车租赁应用程序。我有允许用户租车的功能,但我没有找到阻止用户租同一辆车的方法。这是 RentController:
[HttpGet]
public IActionResult Create(int id)
{
ViewData["IsRented"] = false;
return View(new Rent { CarId = id, UserId = GetCurrentUserId(),
DateTaken = DateTime.Today});
}
// POST: Rents/Create
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("RentId,CarId,UserId,DateTaken,ReturnDate")] Rent rent)
{
if (RentExists(rent.Id))
{
ViewData["IsRented"] = true;
}
else if (ModelState.IsValid)
{
_context.Rent.Add(rent);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(rent);
}
private bool RentExists(int id)
{
return _context.Rent.Any(e => e.Id == id);
}
和 Create.cshtml 租一辆新车:
@if ((bool)ViewData["IsRented"])
{
<div class="alert alert-danger" role="alert">
This car is rented!
</div>
}
这里的想法是:如果已经有一个租用的汽车 id 显示一个错误(汽车是租用的!)并且不允许用户租用它。如果没有,那么用户可以租用它,从而创建新的租金。显然某事不起作用,因为 ViewData["IsRented"] = true; 没有被执行。它有什么问题,或者有没有其他方法可以实现这一目标?
解决方案
我有允许用户租车的功能,但我没有找到阻止用户租同一辆车的方法。
为防止多个用户同时更新同一个实体时发生并发冲突,您可以尝试添加一个名为 的跟踪属性RowVersion
,然后您可以DbUpdateConcurrencyException
在代码逻辑中检查它是否抛出异常,以确定是否发生冲突。
try
{
//your code logic
await _context.SaveChangesAsync();
//...
}
catch (DbUpdateConcurrencyException ex)
{
//Unable to save changes. Data of car may have been modified or deleted since entities were loaded.
//code logic here
}
有关并发处理的更多信息,请查看本教程。
https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/concurrency?view=aspnetcore-3.1
推荐阅读
- kubernetes - redirect request when authentication failed in Kubernetes ingress controller
- laravel - 删除 Laravel 中的重复代码 - 优化
- python - Access to one specific object via multiple threads
- nginx - Nginx - how to redirect to a new url with or without trailing slash
- r - 从matrix1中获取元素位置,以便删除matrix2中具有确定位置的每个元素
- jmeter - How to get https value from response headers in jmeter
- c# - 按自定义索引和相同性对 C# 中的列表进行排序
- nuxt.js - nuxt.js static site makes api calls at client routing
- matlab - Harmonic potential for harmonic oscillator plotted with eigenstates in MATLAB
- windows - Picker module on windows