如何在网络核心中单击按钮使对象的属性增加?

How to make an object's property increase with a button click in net core?

提问人:insolentmamba 提问时间:11/14/2022 最后编辑:Lazar Đorđevićinsolentmamba 更新时间:11/14/2022 访问量:74

问:

我希望能够更改书籍属性(可用性,如果我单击“归还”按钮,则为 +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>
}
C# ASP.NET-MVC . net-core 模型视图控制器 nullreferenceexception

评论

1赞 Jackdaw 11/14/2022
当您在视图中使用 时,这意味着您的视图是强类型的。因此,您需要像您的案例一样传递模型数据。但这是单件商品,而不是集合。所以不清楚为什么在代码中使用 a。Modelreturn View("Index", book);foreach
0赞 insolentmamba 11/14/2022
该 foreach 是实现 CRUD 时生成的 foreach。在这种情况下,我想获得完整的列表,就像显示索引时一样,只是某个项目(我在单击“贷款”按钮时提到的那个),但可用性少了一个。示例:我在“多里安灰色的图片”上单击“贷款”,其中可用性为“2”,然后我得到整个列表,但对于该项目,可用性为“1”

答:

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,以便索引视图可以完成其工作,并在增加或减少后立即保存更新