Asp.net mvc 如何将命名空间添加到自定义路由扩展
Im使用routes.add代替routes.maproute(具有名称空间arg) 因为我延长了课程的时间。 我需要在路由上添加名称空间,因为我的一个区域具有相同的控制器名称 在网站内。 我的问题是我不知道把名称空间放在哪里Asp.net mvc 如何将命名空间添加到自定义路由扩展,asp.net-mvc,model-view-controller,Asp.net Mvc,Model View Controller,Im使用routes.add代替routes.maproute(具有名称空间arg) 因为我延长了课程的时间。 我需要在路由上添加名称空间,因为我的一个区域具有相同的控制器名称 在网站内。 我的问题是我不知道把名称空间放在哪里 public class CultureRoute : Route { public CultureRoute(string url, object defaults, object constraints, RouteValueDictionary data
public class CultureRoute : Route
{
public CultureRoute(string url, object defaults, object constraints, RouteValueDictionary dataTokens)
: base(url, new RouteValueDictionary(constraints), dataTokens, new MvcRouteHandler())
{
}
}
Global.asax
routes.Add("Default", new CultureRoute(
"{controller}/{action}/{id}",
new {controller = "Home", action = "Index", id = UrlParameter.Optional}));
对于那些正在寻找解决方案的人: 首先需要一个接受DataTokens参数的构造函数,并将其传递给Route构造函数 例如,我使用的是一个在线获取的DomainRoute类,它没有传递到域所需的额外参数。因此,我只是实现了一个类似于基本路线的构造函数: 接下来,如果您重写了您的方法,必须在RoutedData返回值中返回DataToken。为了解决这个问题,我必须查看Route.cs源代码(谢谢JAVA2S) 现在只需按照Fleents post将您的名称空间放在dataTokens[“名称空间”]中 问候,, Daryl编辑:(以前创建了自定义路线,但这不是必需的)。这应该能奏效。至少在MVC4和MVC3中是这样
Route defRoute=new CultureRoute(“{controller}/{action}/{id}”,
新建RouteValueDictionary(新建{controller=“Home”,action=“Index”,id=UrlParameter.Optional}),
新的SomeRouteHandler());
if(defRoute.DataTokens==null)
defRoute.DataTokens=新的RouteValueDictionary();
添加(“名称空间”,新字符串[]{“MVCApp.WebUI.Controllers”});
路线。添加(取消路线);
很久以前。。。我想你在用Maarten B的课,对吗?如上图所示添加名称空间对我来说不起作用。那就是将它们作为RouteValueDictionary添加到RouteValueDictionary中。我现在正在扩展它,有一个子域到区域的路由。肯定是很久以前。。。以至于我甚至不知道最初的问题是什么或者我正在解决什么
var dataTokens = new RouteValueDictionary();
var ns = new string[] {"MyProject.Controllers"};
dataTokens["Namespaces"] = ns;
routes.Add("Default", new CultureRoute(
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
null /*constraints*/,
dataTokens
));
public DomainRoute(string domain, string url, object defaults, object constraints, object dataTokens)
: base(url, new RouteValueDictionary(defaults), new RouteValueDictionary(constraints),new RouteValueDictionary(dataTokens),new MvcRouteHandler())
{
Domain = domain;
}
RouteData data = new RouteData(...);
RouteValueDictionary dataTokens = DataTokens;
if (this.DataTokens != null) {
RouteValueDictionary rdDataTokens = rd.DataTokens;
foreach (var token in dataTokens)
rdDataTokens.Add (token.Key, token.Value);
}
}
return data;