Reputation: 7190
In my web application I placed the menu on a partial view and load it from the Site.Master.
Now imagine a gmail like scenario where on your menu you'll have an Inbox(n) item where n is the number of unreaded mails. Is there a clean way to pass the n variable to all of the views that use the Site.Master masterpage?
Something like:
<%: Html.ActionLink("Inbox - " + ViewData["n"], "Index", "Home") %>
Upvotes: 6
Views: 11226
Reputation: 6797
just define Global objects in _ViewStart.cshtml (views root folder), and use them all around views in project ;)
Upvotes: 1
Reputation: 14614
You should be able to do it the way you did in the example, just tell it to make the value a string, since view data returns objects, just unbox the number as a string and then you could use it just like that
<%: Html.ActionLink("Inbox - " +ViewData["n"].ToString(), "Index", "Home") %>
Upvotes: 0
Reputation: 1039508
You could use child actions along with the Html.Action and Html.RenderAction helpers. So let's elaborate with an example.
As always you start with a view model that will represent the information you want to show on this particular view (or in this case partial view):
public class InboxViewModel
{
public int NumberOfUnreadMails { get; set; }
}
then a controller:
public class InboxController : Controller
{
public ActionResult Index()
{
InboxViewModel model = ... // Repository, DI into the controller, ...
return View(model);
}
}
then a corresponding view (~/Views/Inbox/Index.ascx
):
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%: Html.ActionLink("Inbox - " + Model.NumberOfUnreadMails, "Index", "Home") %>
and finally embed this in your master page so that it is available on all views:
<div class="leftMenu">
<% Html.RenderAction("Index", "Inbox"); %>
</div>
Upvotes: 4
Reputation: 100657
Consider keeping this in ViewData[]
. This is how you can easily share data between different (partial) views.
Controller:
ViewData["UnreadMessages"] = "5";
All views can simply access this property.
Upvotes: 0