Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 2 复杂URL路由C#MVC2.0_Asp.net Mvc 2_C# 4.0_Iis 7.5 - Fatal编程技术网

Asp.net mvc 2 复杂URL路由C#MVC2.0

Asp.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。我的问题是,我必须传递给调用

我是ASP.NETMVC的新手,到目前为止,我已经能够计算出我需要的几乎所有东西。我的URL越来越复杂,我可以让它们路由并做我想做的事情,但我确信我这样做的方式是错误的,我必须做的代码是非常草率的。我拥有的几个URL是:

mysite.com/Setup/FieldManager/Client/List
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区域,将子模块映射到控制器,将类型映射到操作,将事件映射到可为空的枚举

这正是我需要的。我在谷歌上搜索了一下,找到了这两个链接:并且能够做我想做的事情。谢谢你的帮助。