2010-07-27 59 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