Specifying an Area when binding a menu to a model

3 posts, 0 answers
  1. Darryl
    Darryl avatar
    2 posts
    Member since:
    May 2008

    Posted 05 Apr 2015 Link to this post

    How do you specify an area when binding to a model?  I'm working on an ASP.NET MVC website using Areas, and using the Kendo().Menu() helper to build the menu.  I'm using the BindTo() method to bind the menu to a model that is based on Kendo.MVC.UI.MenuItem.  How do I tell the helper which area (i.e. which route) to use, and how do I specify that a particular controller is NOT in any of the areas.  The following example code example might help to illustrate the problem I'm having:

    using System.Collections.Generic;
    using System.Web.Routing;
    using My.Resources.Views.Shared;
    using Kendo.Mvc.UI;
     
    namespace My.Web.Configuration
    {
        public class MyMenuItem: Kendo.Mvc.UI.MenuItem
        {
            public int Id { get; set; }
            public IEnumerable<MyMenuItem> SubItems { get; set; }
        }
     
        public class MySiteMap
        {
            public MySiteMap()
            {
                MenuItems = new List<MyMenuItem>
                {
                    // There is an AccountController in an Area named 'Admin'
                     
                    // Neither one of the following approaches works. I think I'm close here, but I'm missing something
                    // new MyMenuItem { Text = "Log In", ControllerName="Account", ActionName="Login", RouteName = "Admin"},
                    // new MyMenuItem { Text = "Log In", ControllerName="Account", ActionName="Login", RouteValues = new RouteValueDictionary(new {area = "Admin"})},
     
                    // The following line works the first time you click on it, but an error occurs the second
                    // time, or when you try to navigate anywhere else, because the helper appends all links
                    // to the Area name, once you've navigated to said area (e.g. "Home" becomes "Admin/Home"
                    // which is incorrect).
                    new MyMenuItem { Text = MenuResources.MenuLogin, ControllerName="Admin/Account", ActionName="Login" },
     
                    // How do I tell the Kendo().Menu() helper that the 'Home' controller, e.g., is not located
                    // in the 'Admin' area?
                    new MyMenuItem { Text = MenuResources.MenuAbout, ControllerName="Home", ActionName="About" },
                    new MyMenuItem
                    {
                        Text = MenuResources.MenuProjects, ControllerName="Projects",
                        ActionName="Index",
                        SubItems = new List<MyMenuItem>
                        {
                            new MyMenuItem{Text = MenuResources.MenuProjectX,  ControllerName="Projects", ActionName="ProjectX"},
                            new MyMenuItem{Text = MenuResources.MenuProjectY, ControllerName="Projects", ActionName="ProjectY"}
                        },
                    },
                    new MyMenuItem { Text = MenuResources.MenuNotesToSelf, ControllerName="Blog", ActionName="Index" }
                };
                SiteMapName = "Root"; // Never displayed
            }
     
            public string SiteMapName { get; set; }
            public IEnumerable<MyMenuItem> MenuItems { get; set; }
        }
     
    }

  2. Daniel
    Admin
    Daniel avatar
    2117 posts

    Posted 08 Apr 2015 Link to this post

    Hello,

    The menu uses the MVC built-in routing so an area can be specified the same way as with the built-in MVC helpers - by adding a route value with key "area":
    new MyMenuItem
    {    
        ControllerName="controller",
        ActionName="action",
        RouteValues = new RouteValueDictionary
        {
            {"area", "areaname"}
        }
    }
    No area can be specified by using empty string for the value.


    Regards,
    Daniel
    Telerik
     

    See What's Next in App Development. Register for TelerikNEXT.

     
  3. UI for ASP.NET MVC is VS 2017 Ready
  4. Darryl
    Darryl avatar
    2 posts
    Member since:
    May 2008

    Posted 08 Apr 2015 in reply to Daniel Link to this post

    Yup, Daniel.  That did it.

    Thanks

Back to Top