2012-08-08 139 views
0

ASP.NET MVC 3路由讓我困惑。我覺得我已經閱讀了一切,但有時候,我仍然不明白。我試圖創建一個我可以訪問的網址,看起來像ASP.NET MVC 3路由結構

/authorized/home/children/{childID} 

我想讓該URL顯示加載特定子內容的HTML視圖。我的看法是定義如下:

/Views/Authorized/Home/Children/Child.cshtml 

在我的Global.asax.cs文件,我已經添加了以下路線:

routes.MapRoute(
    "Child", // Route name 
    "{controller}/Home/Children/{action}/{id}", 
    new { controller = "Authorized", action = "Child", id = UrlParameter.Optional } 
); 

在AuthorizedController.cs,我有以下幾點:

public ActionResult Child(string id) 
{ 
    return View("~/Views/Authorized/Home/Children/Child.cshtml"); 
} 

如果我訪問/授權/家庭/兒童,我看到Child.cshtml的內容。但是,如果我訪問/授權/家庭/兒童/ 1,我得到一個404.

我做錯了什麼?謝謝

+2

這是您定義的唯一路線嗎?如果不是,你可以請張貼其餘的路線? – JTMon 2012-08-08 13:23:59

+0

所有其他路線已被註釋掉,試圖隔離問題。上面註冊的路線是唯一定義的路線。 – user70192 2012-08-08 13:29:00

回答

2

您分享的路線與您所說的路線不符。

你想:

/authorized/home/children/{childID} 

但是,你的路線期待:

/Authorized/Home/Children/{action}/{id} 

注有附加動作參數。孩子是你的操縱員的行爲,還是孩子?如果是孩子,你應該更新你的路線,這一點:

routes.MapRoute(
    "Child", // Route name 
    "{controller}/Home/{action}/{id}", 
    new { controller = "Authorized", action = "Children", id = UrlParameter.Optional } 
); 

然而,如果它的孩子,你需要從您的路徑中刪除{動作}這樣的:

routes.MapRoute(
    "Child", // Route name 
    "{controller}/Home/Children/{id}", 
    new { controller = "Authorized", action = "Child", id = UrlParameter.Optional } 
); 

這將使一個明確的路線,直接指向兒童行動。

+0

對不起,我複製了我打開的第二個項目中的錯誤代碼。我已經更新了我的帖子。 – user70192 2012-08-08 13:43:09

+0

沒問題,我已更新 – 2012-08-08 13:51:27

+0

@Mark Oreta提供的第二條路線是否能解決您的問題?因爲它看起來應該如此。 – JTMon 2012-08-08 13:55:53