在我的web應用程序中,我將菜單放在局部視圖上並從Site.Master加載它。asp-net mvc視圖中的全局變量
現在想象一個類似gmail的場景,其中您的菜單中有一個收件箱(n)項,其中n是未發送郵件的數量。有沒有一種簡單的方法將n變量傳遞給所有使用Site.Master主頁的視圖?
喜歡的東西:
<%: Html.ActionLink("Inbox - " + ViewData["n"], "Index", "Home") %>
在我的web應用程序中,我將菜單放在局部視圖上並從Site.Master加載它。asp-net mvc視圖中的全局變量
現在想象一個類似gmail的場景,其中您的菜單中有一個收件箱(n)項,其中n是未發送郵件的數量。有沒有一種簡單的方法將n變量傳遞給所有使用Site.Master主頁的視圖?
喜歡的東西:
<%: Html.ActionLink("Inbox - " + ViewData["n"], "Index", "Home") %>
您可以使用子操作以及Html.Action and Html.RenderAction助手。所以讓我們來詳細說明一個例子。
一如往常你開始將代表你想顯示在這個特定視圖(或在這種情況下,局部視圖)的信息的視圖模型:
public class InboxViewModel
{
public int NumberOfUnreadMails { get; set; }
}
然後控制器:
public class InboxController : Controller
{
public ActionResult Index()
{
InboxViewModel model = ... // Repository, DI into the controller, ...
return View(model);
}
}
然後相應的視圖(~/Views/Inbox/Index.ascx
):
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%: Html.ActionLink("Inbox - " + Model.NumberOfUnreadMails, "Index", "Home") %>
終於第嵌入在你的主網頁,使其適用於所有的意見:
<div class="leftMenu">
<% Html.RenderAction("Index", "Inbox"); %>
</div>
這工作得很好。不知道RenderAction,只有RenderPartial。謝謝您的幫助。 – dcarneiro 2011-02-23 09:56:16
考慮保持這ViewData[]
。這就是您可以輕鬆地在不同(部分)視圖之間共享數據的方式。
控制器:
ViewData["UnreadMessages"] = "5";
所有視圖可以簡單地訪問此屬性。
問題在於我必須在我所有的操作上設置ViewData [「UnreadMessages」]。我正在尋找一種更清潔的方法。 – dcarneiro 2011-02-23 09:45:51
你應該能夠做到這一點,你沒有在本例中,只要告訴它使值的字符串的方式,因爲視圖數據回報對象,只是拆箱作爲一個字符串的數字,然後你可以使用它,就像是
<%: Html.ActionLink("Inbox - " +ViewData["n"].ToString(), "Index", "Home") %>
這個問題是我必須在我所有的操作上設置ViewData [「UnreadMessages」]。我正在尋找一種更清潔的方法 – dcarneiro 2011-02-23 10:30:29
只是_ViewStart.cshtml(視圖根文件夾)定義全局對象,並用它們各地意見的項目;)
[Access Viewbag屬性在所有視圖上]的可能重複](https://stackoverflow.com/questions/273085 24/access-viewbag-property-on-all-views) – tecla 2017-06-16 23:56:43