asp.net-mvc – asp.NET:未知长度的MVC路径
发布时间:2020-05-23 22:19:47 所属栏目:asp.Net 来源:互联网
导读:我正在asp.NET中为Web门户构建MVC应用程序.我准备了一系列控制器,并将所有不与之相关的路径映射到Page控制器,这将呈现适当的页面. 我的默认路由如下: routes.MapRoute( Default, {level1}/{level2}/{level3}, new { controller = Page, action = Index, leve
|
我正在asp.NET中为Web门户构建MVC应用程序.我准备了一系列控制器,并将所有不与之相关的路径映射到Page控制器,这将呈现适当的页面. 我的默认路由如下: routes.MapRoute(
"Default","{level1}/{level2}/{level3}",new { controller = "Page",action = "Index",level1 = "home",level2 = "",level3 = "" }
);
但这有固定的宽度,它只接受最多3个级别.此外,我想管理附加到路径的操作,如“编辑”和“删除”.这可能吗? company/about/who_we_are/staff -> Controller: Page,Action: Index,Parms: company/about/who_we_are/staff company/about/who_we_are/staff/edit -> Controller: Page,Action: Edit,Parms: company/about/who_we_are/staff company/edit -> Controller: Page,Parms: company 或者有更好的方法对此进行建模吗?页面的所有路径都在数据库中,因此它们会动态更改. 解决方法您可以使用通配符路由:"{*data}"
看看这个SO:ASP.net MVC custom route handler/constraint 简单的解决方案: (未经测试但……) 路线: routes.Add(new Route
(
"{*data}",new RouteValueDictionary(new {controller = "Page",data = ""}),new PageRouteHandler()
)
);
处理程序看起来像: public class PageRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new PageHttpHandler(requestContext);
}
}
class PageHttpHandler : MvcHandler
{
public PageHttpHandler(RequestContext requestContext)
: base(requestContext)
{
}
protected override void ProcessRequest(HttpContextBase httpContext)
{
IController controller = new PageController();
((Controller)controller).ActionInvoker = new PageActionInvoker();
controller.Execute(RequestContext);
}
}
class PageActionInvoker : ControllerActionInvoker
{
protected override ActionResult InvokeActionMethod(ControllerContext controllerContext,ActionDescriptor actionDescriptor,IDictionary<string,object> parameters)
{
string data = controllerContext.RouteData.GetRequiredString("data");
string[] tokens = data.Split('/');
int lenght = tokens.Length;
if (lenght == 0)
return new NotFoundResult();
if (tokens[tokens.Length - 1] == "edit")
{
parameters["action"] = "edit";
lenght--;
}
for (int i = 0; i < length; i++)
parameters["level" + (i + 1).ToString()] = tokens[i];
return base.InvokeActionMethod(controllerContext,actionDescriptor,parameters);
}
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ASP.NET Ajax客户端框架无法加载.将ScriptManager放在空白页
- asp.net-mvc – 如何在backbone.js中保存模型集合?
- asp.net-mvc – 在MVC中结合JS / CSS的任何经验?
- asp.net-web-api – 如何告诉RavenDB忽略属性而不是WebAPI?
- 在ASP.NET 5中获取AuthenticationProperties
- asp.net-mvc – ASP.Net MVC异常记录与错误处理相结合
- asp.net-mvc – ASP.NET MVC 4覆盖发出的html名称和id
- asp.net – 如何在aspx页面中显示pdf?
- ASP.NET page_init事件?
- asp.net-mvc-2 – 如何设置RadioButtonFor()在ASp.net MVC
推荐文章
站长推荐
- asp.net-mvc – 如何避免使用MVC的标签汤?
- log4Net EventlogAppender不适用于Asp.Net 2.0 W
- asp.net-mvc – 在asp.net mvc中实现stackoverfl
- 你使用ASP.NET MVC Action方法做了什么聪明的事情
- asp.net-mvc – ASP.NET MVC FileStreamResult不
- asp.net – 在Owin有来自Global.asax的Applicati
- asp.net-mvc – 具有列表和编辑器模板的ViewMode
- asp.net – 防止XSS(跨站脚本)
- 实体框架 – 具有实体框架的MVC MiniProfiler 5模
- asp.net-core-mvc – ASP NET Core 2.0 appsetti
热点阅读
