![](/img/trans.png)
[英]Required string attribute with null value gives IsValid=true in ASP.NET Core 2 Razor Page
[英]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>();
從我之前與 OP 的討論中編輯:
將 controller 動作中的大寫從
public async Task<IActionResult> onPostDelete(int id)
至
public async Task<IActionResult> OnPostDelete(int id)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.