2010-07-27 81 views
2

我有基本的主/明细视图与默认的ASP.NET MVC路由工作得很好;不过,我想建立一些网址,像这样:ASP.NET MVC路由的主/明细视图与“细节儿童”

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

什么我不知道

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

(我不依赖于这个网址的格式,只是一些粗略equalivent。)把这个另一种方式,是这样的:

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

我试图避免的,是搞乱我的看法\ class目录下有一堆意见,这基本上都是细节的衍生物查看。

我在ASP.NET MVC 1和.NET 3.5 SP1。

+0

我几乎和你在一起。请澄清一下?当你说'主'时,你的意思是一个主页? – 2010-07-27 20:47:15

+0

我在想这可能是一个“孩子”母版页。即我的“Class”对象的详细信息的母版页。这将有一个特定的数据具体到一个类的细节,同时允许我包括额外的“页”的不同部分的细节,一个是“日志”一个是“状态”等。 – Nate 2010-07-27 21:16:27

回答

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()方法。

+0

我如何从你指定的路线,到'Logs(..);'ActionResult? – Nate 2010-07-27 21:58:42

+0

假设你的控制器是'MyController',id是'1',master是'Detail',那么url就是〜/ MyController/1/Detail/Logs – 2010-07-28 15:16:42