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
; }
}
}