2016-12-15 21 views
1

我的應用程序有牆壁和筆記。我希望把活動牆的佈局名稱。 如何做到這一點? 我知道在前端我只能使用@Model ......但誰發送這個模型? 另外更好的想法是將這些信息存儲在會話變量中,或者在用戶數據庫中創建另一個屬性?如何將變量傳遞到.NET中的佈局?

編輯:我使用.NET Core 1.1。

+2

看看ViewBag:http://www.tutorialsteacher.com/mvc/viewbag-in-asp.net-mvc – bolt19

回答

2

如何通過可變進佈局.NET?

我知道在前端我可以只使用@Model ...但誰發送這個 模型?在控制器/操作創建

型號,而你把它傳到您的操作來查看:

return View(myModel); 


對於需要指定的問題或添加示例代碼更準確的答案什麼你正在嘗試做的,但在一般情況下,你可以使用:

  • 模型(視圖模型)
  • ViewBag
  • 的ViewData


請找到更多的信息:


此外,View Components是一個有趣的功能,它允許您創建UI小部件。


更新:

在標準佈局登錄就可以看到例如後「你好一@一」的所有時間。我希望在我的活動牆上也有這個。在屏幕上顯示我的牆的名稱,直到我改變它或我退出。

對於這個特殊的目的,你可以只把下面的代碼直接進入您的佈局/視圖文件:

@using System.Security.Claims 
@using Microsoft.AspNetCore.Identity 
@inject UserManager<ApplicationUser> userManager 
@{ 
    var userInfo = ((await userManager?.GetUserAsync(User))?.xxx); 
    // where 'xxx' is any property of ApplicationUser model 
} 

那麼你可以使用@userInfo在同一個視圖中顯示這些信息。

用戶選擇牆(只需單擊列表中的同一牆),然後該牆的名稱應佈置在用戶註銷或更換牆之前。

在這種情況下,JavaScript似乎是一個好的/簡單的解決方案?或者您可以在瀏覽器緩存中讀取/存儲該信息?

據我所知,沒有簡單的方法來訪問ASP.NET Core中的會話 - 控制器操作被設計爲無狀態,並且不推薦重寫該行爲(閱讀文檔和SO爲什麼?)。

因此,如果不是JavaScript,那麼您可以將服務器的名稱發回服務器並將其存儲在數據庫中,然後您可以隨時通過View Components訪問它 - 我在項目中使用ViewComponents來構建並顯示主菜單,它對我很好。

沒有爲ViewComponent多一點點的編碼(您需要創建控制器和視圖),但它的靈活的功能(我喜歡),並容易在你需要它的地方打電話,只是

@await Component.InvokeAsync("NameOfCOmponent")

+0

好吧,但如何存儲這個變量?如果我使用viewBag或在控制器中傳遞模型,我會看到我的文本。但是如果我點擊進入下一個選項卡,我的視圖包含空值。那麼如何存儲這個變量? –

+0

這就是我不明白的 - 你爲什麼要存儲?請,你能給我更多的細節嗎? –

+0

在登錄後的標準佈局中,您可以一直看到例如「hello a @ a」。我希望在我的活動牆上也有這個。在屏幕上顯示我的牆的名稱,直到我改變它或我退出。 –

2

如果你是在談論_Layout.cshtml,那麼你可以放在_Layout.cshtml如下:

@RenderSection("layoutName", required: false) 

它繼承這個佈局現在可以將代碼添加到本節的任何視圖。

SomeOtherView.cshtml

@section layoutName{ 
    <h1>@Model.LayoutName</h1> 
} 
+0

好吧,但如果我改變視圖如何保持這個文本? –

+0

OP想要的是直接在佈局級別控制它,而不是強制在每個需要它的視圖上使用SECTION,他想在佈局級別用條件決定。維護起來比較簡單,因爲您只需要在佈局中更改該佈局,而不是使用它的所有視圖。想一想添加使用GoogleMap API所需的腳本。 –

+0

這可能是這樣的,但是一個有條件的陳述可能會根據他擁有的觀點的數量而變得很大。 googlemap API與這個問題有什麼關係? – KevDevMan