如何定义路线和2个控制器的控制器结构?

时间:2010-06-19 15:03:38

标签: c# asp.net-mvc routing controller

我想创建一个MVC应用程序来生成情况说明书,但我不确定如何构建路由和控制器。

它由一个索引页面组成,该索引页面充当许多独立面板布局的模板,每个面板包含不同类型的数据。

我想要一个如下所示的路线模板:

/Factsheets/Panels/PanelType?fundId=1&countryId=ABC

所以这些就是我正在使用的网址:

/Factsheets/Panels/NameAndDatePanel?Afund=1&county=IE  
/Factsheets/Panels/AssetsPanel?fund=1&county=IE

我希望Factsheets控制器能够为Panel控制器提供生成我请求的面板类型所需的配置对象。

我的路由结构应该是什么样的?

我的控制器结构应该是什么样的?

编辑

如果我想拥有如下的roure结构会有什么变化:

我想要一个如下所示的路线模板:

/Factsheets/ContentArea/Panels/PanelType?fundId=1&countryId=ABC

所以这些就是我正在使用的网址:

/Factsheets/PageTop/Panels/NameAndDatePanel?Afund=1&county=IE  
/Factsheets/PageTop/Panels/AssetsPanel?fund=1&county=IE

以便FactsheetsController被实例化以包含ContentArea所需的数据,以了解要向其生成的面板提供哪些数据。

1 个答案:

答案 0 :(得分:1)

?之后的内容是查询字符串,因此它不会被路由引擎反映出来。所以你的路线可能如下:

routes.MapRoute(
    "Default",
    "{controller}/{action}/{panelType}",
    new { controller = "Factsheets", action = "Panels", panelType = UrlParameter.Optional }
);

你将拥有以下控制器:

public class FactsheetsController : Controller
{
    public ActionResult Panels(string panelType)
    {
        return View();
    }
}

更新:

如果panelType参数不是可选的,则可以提供正则表达式约束:

routes.MapRoute(
    "Default",
    "Factsheets/Panels/{panelType}",
    new { controller = "Factsheets", action = "Panels", panelType = UrlParameter.Optional },
    new { panelType = ".+" }
);