使用“Detail Children”的主/详细视图的ASP.NET MVC路由

时间:2010-07-27 20:00:39

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

我有基本的主/细节视图与默认的ASP.NET MVC路由一起工作;但是我想构建一些像这样的URL:

/Class/Details/5 -- General Detail view [Working]

我不确定(并且我不依赖于此URL格式,只是大致相同的内容。)

/Class/5/Details/Logs -- Detail View with Logs
/Class/5/Details/Status -- Detail View with current Status

另一种说法是这样的:

/{controller}/{id}/{controllerSpecificMaster}/{action}/

我试图避免的是,使用一堆视图将我的Views \ Class目录混乱,这些视图基本上都是详细信息视图的衍生物。

我使用的是ASP.NET MVC 1和.NET 3.5 SP1。

1 个答案:

答案 0 :(得分:1)

你需要做的第一件事是你的路线。您可能已经这样做了,但是如果还没有,这里有一个路径条目可以处理您的自定义路线需求:

routes.MapRoute("Master_Detail",
                "{controller}/{id}/{controllerSpecificMaster}/{action}",
                new { controller = "Class", 
                      action = "Index", 
                      id = UrlParameter.Optional,
                      controllerSpecificMaster = "Details"
                });

然后,在您要使用路径指定母版页的操作方法中,只需在方法参数中包含路径键,然后将其传递给视图:

public ActionResult Logs(int id, string controllerSpecificMaster)
{
    //do something

    //return view with master name as argument
    return View("Logs", controllerSpecificMaster);
}

如果你必须这么做,我建议创建一个自定义视图引擎并覆盖FindView()方法。