簡體   English   中英

未將數據列表返回到 ASP.NET Core MVC 中的索引視圖中

[英]Not returning a list of data into index view in ASP.NET Core MVC

我正在使用 ASP.NET Core MVC 對我自己的網站進行編程,並按照我想要迭代從我的數據庫填充到視圖的數據的視頻教程之一。 以下是代碼:

存儲庫

 public class ChoreBearRepository: IChoreBearRepo { private readonly DatabaseContext _context; public ChoreBearRepository(DatabaseContext context) { _context = context; } /* This methods returns all categories from the database using the background thread. */ public async Task<List<CategoryofTask>> GetAllCategories() { return await _context.categoryOfTasks.Select(category => new CategoryofTask(){ CategoryName = category.CategoryName, CategoryDesc = category.CategoryDesc, CategoryID = category.CategoryID, CategoryImageURL = category.CategoryImageURL, CategoryRate = category.CategoryRate }).ToListAsync(); } }

Controller:

 public class HomeController: Controller { private readonly IChoreBearRepo _repository; public HomeController(IChoreBearRepo repository) { _repository = repository; } // public IActionResult Index() // { // return View(); // } [HttpGet] public async Task<IActionResult> Index() { var data = await _repository.GetAllCategories(); return View(data); } }

索引.cshtml

 @page @model IEnumerable<ChoreBear_Website.Models.CategoryofTask> <div class="row"> @foreach (var category in Model) { <partial name="Categories" model=@Model/> } </div>

部分視圖 (Categories.cshtml)

 @model CategoryofTask <div class="card" style="width: 18rem;"> <img class="card-img-top" src="@Model.CategoryImageURL" alt="Card image cap"> <div class="card-body"> <h5 class="card-title">@Model.CategoryName</h5> <p class="card-text">@Model.CategoryDesc</p> <a href="#" class="btn btn-primary">Go somewhere</a> </div> </div>

該列表包含來自數據庫的數據,但網站項目向我返回了一個錯誤,即:

NullReferenceException:Object 引用未設置為 object 的實例。 MyApp.Namespace.Home.Views_Home_Index.get_Model()

我知道列表是 null 這就是為什么我想知道我應該在哪里初始化列表。 我按照視頻教程中的代碼示例進行操作。

PS:我按照這個視頻教程從數據庫中獲取數據列表

您的代碼看起來可以檢索列表並將其返回到 VIEW“索引”,即使該列表為空,因為數據庫中沒有記錄。

但是,有兩個問題。 您的 Index.cshtml 有一個“@page”指令,這意味着它現在是 Razor 頁面而不是視圖,並希望在 Index.cshtml.cs 后面的頁面或同一頁面的 @code 部分中找到 model。 這是你錯誤的根源。

此外,在下文中,您將 IEnumerable 作為 model 傳遞給部分視圖,該部分視圖需要一個單獨的 CategoryOfTask ...

@model IEnumerable<ChoreBear_Website.Models.CategoryofTask>

<div class="row">
    @foreach (var category in Model)
    {
        <partial name="Categories" model=@Model/>
    }
</div>

換個試試...

<partial name="Categories" model=@Model/>

至...

<partial name="Categories" model=@category/>

要了解 Razor 視圖和頁面之間的區別,請參閱此鏈接:

https://docs.microsoft.com/en-us/aspnet/core/razor-pages/?view=aspnetcore-5.0&tabs=visual-studio

前面的代碼看起來很像 ASP.NET 核心應用程序中使用的帶有控制器和視圖的 Razor 視圖文件。 使它與眾不同的是@page 指令。 @page 使文件成為 MVC 操作 - 這意味着它直接處理請求,而不通過 controller。 @page 必須是頁面上的第一個 Razor 指令。 @page 影響其他 Razor 構造的行為。 Razor 頁面文件名具有 .cshtml 后綴。

暫無
暫無

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

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