2011-10-06 47 views
2

我來自Rails背景,我在圍繞微軟的MVC框架時遇到了問題。ASP.NET MVC3在一個區域內嵌套的資源

今天是路由。 Rails爲您提供名稱空間(例如Admin),這與.NET MVC3中的區域相同。 Rails還允許你在你的路由中定義嵌套的資源,例如/ posts/1/comments/1/edit,並且在你的行爲中你基本上得到了params [:post_id]和params [:id]。

我需要在ASP.NET MVC3中類似的東西,但不知道如何去做這件事。谷歌搜索結果至少有30種不同的方式來完成這一點,而不是他們提到的領域。

這種感覺就像我應該在這裏增加/修改的東西:

public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Admin_default", 
      "Admin/{controller}/{action}/{id}", 
      new { action = "Index", id = UrlParameter.Optional } 
     ); 
    } 

但不知道在哪裏。有什麼建議麼?

回答

2

我想你是在正確的文件(你的AreaRegistration.cs文件)。我更喜歡讓自己的路線更加明確,而不是使用他們提供的默認「全部捕捉」類型的路線。因此,這裏是我會如何處理這樣一個例子:

在RegisterArea方法在CommentController添加像這樣的現有路由之前(或擺脫現有的一起)

context.MapRoute(
    "Edit_Comment", 
    "posts/{postId}/comments/{commentId}/edit", 
    new { controller = "Comment", action = "Edit" } 
); 

然後的.cs你將有以下作用:

public ActionResult Edit(int postId, int commentId) 
{ 
    // Do your edit logic then return an ActionResult 
} 
+0

謝謝您的回答,我會雖然它看起來像它應該工作給這一個鏡頭。你有沒有在MVC3和區域使用資源?即 - http://stevehodgkiss.com/posts/restful-routing-for-asp-net-mvc-2 –

+0

我沒有在mvc3中使用資源。隨着我們的網站結構的方式,它不會是一個真正合適的。我們通過get或post參數傳遞大部分數據,而不是使用路由值。 – bbak

+0

感謝您澄清。乾杯! –