簡體   English   中英

ASP.NET 內核 razor 頁值不能為 null

[英]ASP.NET core razor page value cannot be null

我是 ASP.NET 內核和 razor 頁面的新手。 我已經創建了一個按鈕並分配了一個頁面處理程序來刪除該條目。 當我嘗試刪除時,我收到 null 參考錯誤。 當我運行代碼並單擊按鈕刪除條目時,我收到 null 異常錯誤

我想知道我在哪里犯了錯誤以及一些改進我的編碼的指導。 提前感謝那些幫助過的人。

這是我的索引頁

@page
@model BookList.Pages.BookPages.IndexModel

       
            <form method="post">
                @if (Model.Books.Count()>0)
                {
                    <table class="table table-dark border">
                        <tr class="table-secondary">
                         @foreach (var book in Model.Books)
                        {
                            <tr>
                                <td>
                                    @Html.DisplayFor(m => book.Name)
                                </td>
                                <td>
                                    @Html.DisplayFor(m => book.Author)
                                </td>
                                 <td>
                                    <button class="btn btn-danger btn-sm" asp-page-handler="Delete" asp-route-id="@book.Id" onclick="return confirm('Are you sure you want to delete?')">Delete</button>
                                    <a class="btn btn-success btn-sm" asp-route-id="@book.Id" asp-page="Edit">Edit</a>
                                   
                                </td>
                            </tr>
                        }
                    </table>
                }
                else
                {
                    <p>No books available</p>
                }
            </form>
       

這是我的頁面 model

        public IEnumerable<Book> Books { get; set; }

        public async Task OnGet()
        {
            Books = await _dbContext.Books.ToListAsync();
        }
        
        
        public async Task<IActionResult> onPostDelete(int id)
        {
            var book = await _dbContext.Books.FindAsync(id);

            if (book == null)
                return NotFound();

            _dbContext.Books.Remove(book);

            await _dbContext.SaveChangesAsync();

            return RedirectToPage("Index");

        }
    }
}

您可以嘗試在您的頁面中發送 model ,例如

var allBooks=  await _dbContext.Books.ToList();

return View(allBooks);

如果這不起作用,請分享您的整個錯誤頁面,它可能包含嚴重的解釋。

根據您的堆棧跟蹤, Model.Books是 null。 當您嘗試.Count() null 集合時,您將收到 null 異常。

您可以在您的 razor 視圖中更換

@if (Model.Books.Count()>0)

@if (Model.Books?.Count()>0)

通過空條件運算符處理 null 。

否則,從 controller 處處理 null

Books = await _dbContext.Books.ToListAsync();

Books = (await _dbContext.Books.ToListAsync()) ?? new List<Book>();

通過null 合並運算符

從我之前與 OP 的討論中編輯

將 controller 動作中的大寫從

public async Task<IActionResult> onPostDelete(int id)

public async Task<IActionResult> OnPostDelete(int id)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM