Asp.net mvc 2 复杂URL路由C#MVC2.0
我是ASP.NETMVC的新手,到目前为止,我已经能够计算出我需要的几乎所有东西。我的URL越来越复杂,我可以让它们路由并做我想做的事情,但我确信我这样做的方式是错误的,我必须做的代码是非常草率的。我拥有的几个URL是: mysite.com/Setup/FieldManager/Client/ListAsp.net mvc 2 复杂URL路由C#MVC2.0,asp.net-mvc-2,c#-4.0,iis-7.5,Asp.net Mvc 2,C# 4.0,Iis 7.5,我是ASP.NETMVC的新手,到目前为止,我已经能够计算出我需要的几乎所有东西。我的URL越来越复杂,我可以让它们路由并做我想做的事情,但我确信我这样做的方式是错误的,我必须做的代码是非常草率的。我拥有的几个URL是: mysite.com/Setup/FieldManager/Client/List mysite.com/Setup/FieldManager/Client/Add 基本上,我想要的URL布局是Module/SubModule/Type/Event。我的问题是,我必须传递给调用
mysite.com/Setup/FieldManager/Client/Add 基本上,我想要的URL布局是Module/SubModule/Type/Event。我的问题是,我必须传递给调用Field Manager操作的设置控制器。从这里开始,我必须执行一个荒谬的switch语句,然后“子管理”从这里到其他正确操作的路由。我的Field Manager操作如下所示:
public virtual ActionResult FieldManager(string type, string option, string inputType, string values, string label, string varname, string id)
{
CheckAuth(false);
ActionResult theView = null;
switch (type)
{
case "Client":
switch (option)
{
case "Add":
theView = AddClientField();
break;
case "List":
theView = ClientFieldManager();
break;
case "Save":
theView = SaveClientField(inputType, values, label, varname, id);
break;
default:
theView = EditClientField(option);
break;
}
break;
case "Case":
theView = View("CaseFieldManager");
break;
default:
theView = View("Error");
break;
}
return theView;
}
我希望维护我正在使用的相同URL,并直接调用正确的控制器/操作,而无需将调用从一个操作重新路由到另一个操作。下面是我设置的当前路线
routes.MapRoute(
"Default",
"{controller}/{action}/{type}/{option}",
new { action = "Index", type = UrlParameter.Optional, option = UrlParameter.Optional }
);
routes.MapRoute(
"Root",
"",
new { controller = "Account", action = "Index", id = UrlParameter.Optional }
);
我所做的工作太草率了,我不得不在调用之间转换类型。我正在寻找最好的方法来完成我的目标。最好的方法是为我的所有呼叫创建数百条特定路由,还是我遗漏了什么?一个改进可能是将类型和选项映射到可空枚举而不是字符串。或者将模块映射到MVC区域,将子模块映射到控制器,将类型映射到操作,将事件映射到可为空的枚举 这正是我需要的。我在谷歌上搜索了一下,找到了这两个链接:并且能够做我想做的事情。谢谢你的帮助。