我有一個問題,找不到解決方案。
我正在 Visual Studio 2022、ASP.NET Core 6.0 Razor 頁面中開發一個站點。(不是MVC)
我為導航制作了一個資料庫驅動 (MSSQL) 動態選單。我在臨時頁面中制作了這個選單,它可以正常作業。當我想將此選單包含在布局頁面的導航欄中時,問題就開始了。
“部分頁面”對我來說似乎不是一個解決方案,任何建議或樣本我怎么能做到這一點?
uj5u.com熱心網友回復:
編輯:我更新了這與剃刀頁面更相關,因為我沒有看到你最初在哪里使用控制器。但是,由于我很懶,我留下了很多控制器的東西。
這取決于您希望如何以兩種方式構建導航視圖 RenderSection 或 ViewComponent。
渲染部分:
https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.razor.razorpage.rendersection?view=aspnetcore-7.0
你會在你的布局中有一個你說的地方@RenderSection("Navigation",true)
然后在您的視圖中(您要回傳的主要 cshtml)您將有一個
@section Navigation
{
<div>Nav section </div>
}
查看組件 https://www.learnrazorpages.com/razor-pages/view-components
在您的布局中,您將擁有
@await Component.InvokeAsync(typeof(NavViewComponent))
您將擁有一個名為 NavViewComponent 的類(您可以在類建構式中使用依賴注入)
那將有一個方法名稱
public async Task<IViewComponentResult> InvokeAsync() {
todo logic
return View()
}
以及位于 shared/views/Nav 中的視圖
檔案夾中的視圖應稱為默認
您還可以在檔案夾中設定不同的視圖,并通過回傳 View("{ViewName}") 在 NavViewComponent 中呼叫它們,然后將 {ViewName} 添加到與默認視圖相同的位置。
這兩種方法之間的兩個區別是 Main body view 和 nav 需要多少通信。例如,如果我的導航螢屏是基于角色、用戶或控制器的,并且與主體沒有任何關系。在這種情況下,請使用視圖組件,否則您將不得不在每個視圖中使用 RenderSection(nav)。但是,如果 http 引數中的某些內容直接控制 Nav 中的內容或主視圖中的某些內容控制它使用渲染部分。
請記住,這只是一個建議,說明為什么您可能會選擇一個而不是另一個。如果將來您需要在視圖組件中的 http 回應中使用某些內容,您可以將 httpcontext 注入到視圖組件中并在那里使用它。但是,這會有點混亂。
========編輯============ 發生這種情況的原因是您沒有將 AltKat 傳遞到您的視圖模型中。
假設您正在使用物體框架
將串列屬性添加到您的 AnaKategori 模型
public List<AltKategori> AltCategories {get;set;}
然后在視圖組件中
InvokeAsync() {
var AnaKat = await dbcontext.AnaKategori.Include(m => m.AltCategories).ToListAsync();
return View(anaKat);
}
然后在視圖中
@foreach(var menu in Model) {
<li> @menu.AnaKatAdi</li>
@foreach(var menu2 in menu.AltCategories) {
<blockquote>@menu2.AnaKatAdi</backquote>
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/511746.html
