Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

global variable in asp-net mvc views

Tags:

asp.net-mvc

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") %>
like image 886
dcarneiro Avatar asked Feb 22 '11 18:02

dcarneiro


1 Answers

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>
like image 118
Darin Dimitrov Avatar answered Oct 05 '22 00:10

Darin Dimitrov