ASP.Net MVC4->如何设置此路由

时间:2014-02-19 20:22:14

标签: asp.net-mvc-4 asp.net-mvc-routing

我想知道如何在我的MVC4应用程序中设置路由,我可以在其中设置一个名为TMZ的控制器并让它处理所有这些路径:

/TMZ/About
/TMZ/Webinars
/TMZ/News
/TMZ/Conferment
/TMZ/CustomerCare
/TMZ/Marketing/Emails
/TMZ/Marketing/Brochures
/TMZ/Marketing/Print
/TMZ/Marketing/Press
/TMZ/Marketing/Presentations
/TMZ/Marketing/Graphics
/TMZ/Marketing/OCSRY
/TMZ/Marketing/Resources
/TMZ/Marketing/DesignStandards
/TMZ/Marketing/Videos
/TMZ/Marketing/PromoKits
/TMZ/Faculty/Forms
/TMZ/Faculty/Reports
/TMZ/CE/Guides
/TMZ/CE/Reports
/TMZ/Academy/Papers
/TMZ/Academy/Books
/TMZ/Academy/Promotions
/TMZ/ManualOfOperations

显示代码:

这是我的RouteConfig.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace LicenseeArchive
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute("TMZ",
                   "TMZ/{action}/{subaction}/{id}",
                   new { controller = "TMZ", action = "Index", subaction = UrlParameter.Optional, id = UrlParameter.Optional },
                   null,
                   new[] { "LicenseeArchive.Web.Controllers" });

            routes.MapRoute("Default",
                   "{controller}/{action}/{id}",
                   new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                   null,
                   new[] { "LicenseeArchive.Web.Controllers" });
        }
    }
}

这是我的Global.asax.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace LicenseeArchive
{

    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AuthConfig.RegisterAuth();
        }
    }
}

这是我的TMZController:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace LicenseeArchive.Controllers
{
    public class TMZController : Controller
    {
        //
        // GET: /TMZ/

        public ActionResult Index()
        {
            return View();
        }

        public ActionResult About()
        {
            return View();
        }

        public ActionResult Marketing(string subaction)
        {
            string _view = "Index";
            switch (subaction)
            {
                case "Brochures":
                    _view = "Marketing/Brochures";
                    break;                
            }
            return View(_view);
        }
    }
}

这是我的View文件夹结构:

Views
    Account
        Login.cshtml
        Manage.cshtml
        Register.cshtml
    Home
        About.cshtml
        Contact.cshtml
        Index.cshtml
    Shared
        _Footer.cshtml
        _Head.cshtml
        _HeaderBlock.cshtml
        _Layout.cshtml
        _LeftAside.cshtml
        _LoginPartial.cshtml
        _TopNav.cshtml
        Error.cshtml
    TMZ
        Academy
            Books.cshtml
            Papers.cshtml
            Promotions.cshtml
        CE
            Guides.cshtml
            Reports.cshtml
        Faculty
            Forms.cshtml
            Reports.cshtml
        Marketing
            Emails.cshtml
            Brochures.cshtml
            Print.cshtml
            Press.cshtml
            Presentations.cshtml
            Graphics.cshtml
            OCSRY.cshtml
            Resources.cshtml
            DesignStandards.cshtml
            Videos.cshtml
            PromoKits.cshtml
        About.cshtml
        Conferment.cshtml
        CustomerCare.cshtml
        News.cshtml
        ManualOfOperations.cshtml
        Webinars.cshtml
    _ViewStart.cshtml
    Web.Config

2 个答案:

答案 0 :(得分:2)

最简单的方法是修改Global.asax.cs

中的“默认”路线
routes.MapRoute("Default",
       "{controller}/{action}/{subaction}/{id}",
       new {subaction= UrlParameter.Optional, id = UrlParameter.Optional});

这意味着你也可以在其他控制器中使用相同的url格式。你的TMZController看起来像是:

public class TMZController : Controller
{
    public ActionResult About()
    {
        return View();
    }

    public ActionResult Marketing(string subaction)
    {
        return View();
    }
}

因为subaction / id都是可选的,你可以构建2个,3个或4个部分的url,只需在你的动作中拾取额外的参数,然后根据需要在方法体内处理它们。

答案 1 :(得分:1)

routes.MapRoute("TMZ",
       "TMZ/{action}/{id}",
       new {controller = "TMZ", action = "Index", id = UrlParameter.Optional},
       null,
       new[] {"YourNamespace.Web.Controllers"});

routes.MapRoute("Default",
       "{controller}/{action}/{id}",
       new {controller = "Home", action = "Index", id = UrlParameter.Optional},
       null,
       new[] {"YourNamespace.Web.Controllers"});

在这种情况下,我假设您有一个名为TMZ的控制器,并且在该控制器中您已设置所有其他操作,包括市场营销,学院,教师,CE

但这里有两件重要的事情需要考虑

  1. 这条路线应该在默认路线之前“我把它放在这里”
  2. TMZController中的操作应该有一个字符串id参数来处理请求。这个id将被传递给营销活动的“资源”或学院行动的“书籍”。
  3. 希望这很清楚。