提问人:insolentmamba 提问时间:11/14/2022 最后编辑:Lazar Đorđevićinsolentmamba 更新时间:11/14/2022 访问量:74
如何在网络核心中单击按钮使对象的属性增加?
How to make an object's property increase with a button click in net core?
问:
我希望能够更改书籍属性(可用性,如果我单击“归还”按钮,则为 +1,如果单击“借阅”按钮,则为 -1“)。
一段时间以来,我一直在玩弄和重写代码,但发现我不会自己得到它,因为也许我不完全了解网络核心背后的理论
public async Task<IActionResult> Loan(string id)
{
if (id == null || _context.Books == null)
{
return NotFound();
}
var book = await _context.Books
.FirstOrDefaultAsync(m => m.BookCode == id);
if (book == null)
{
return NotFound();
}
else if (book.Availability == 0)
{
return BadRequest();
}
else
{
book.Availability = (sbyte)(book.Availability - 1);
return View("Index");
}
}
我希望再次看到书籍索引,但在点击“借阅”按钮后,少了一本可用的书。相反,我收到了这个错误
"System.NullReferenceException: 'Object reference not set to an instance of an object.'"
参考模型上索引右侧的 Razor 视图(第一行)
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.Author)
</td>
<td>
@Html.DisplayFor(modelItem => item.YearPublished)
</td>
<td>
@Html.DisplayFor(modelItem => item.BookCode)
</td>
<td>
@Html.DisplayFor(modelItem => item.Availability)
</td>
</tr>
}
答:
0赞
insolentmamba
11/14/2022
#1
解决了它。将 Loan 方法替换为以下方法:
public async Task<IActionResult> Loan(string id)
{
if (id == null || _context.Books == null)
{
return NotFound();
}
var book = await _context.Books
.FirstOrDefaultAsync(m => m.BookCode == id);
if (book == null)
{
return NotFound();
}
else if (book.Availability == 0)
{
return View("Index", await _context.Books.ToListAsync());
}
else {
book.Availability--;
_context.Update(book);
await _context.SaveChangesAsync();
return View("Index", await _context.Books.ToListAsync());
}
不太确定,但似乎我需要返回一个 IEnumerable,以便索引视图可以完成其工作,并在增加或减少后立即保存更新
评论
Model
return View("Index", book);
foreach