2012-07-31 62 views
0

我正在學習使用基本項目模板加上幾個例子的MVC 3的過程。事情進展順利,但現在我正在努力實現我的控制器,而且我遇到了一些問題。使用默認項目模板的基本MVC路由查詢

到目前爲止,我已經修改了_Layout.cshtml文件有定義了指定的路線新的鏈接:

 <header> 
     <div id="title"> 
      <h1>My MVC Application</h1> 
     </div> 
     <div id="logindisplay"> 
      @Html.Partial("_LogOnPartial") 
     </div> 
     <nav> 
      <ul id="menu"> 
       <li>@Html.ActionLink("Home", "Index", "Home")</li> 
       <li>@Html.RouteLink("Contracts", "Contract")</li> 
       <li>@Html.ActionLink("About", "About", "Home")</li> 
      </ul> 
     </nav> 
    </header> 

和我的global.asax.cs文件如下:

 routes.MapRoute(
      "Contract", 
      "Contract", 
      new { controller = "Contract", action = "List", id = UrlParameter.Optional } 
     ); 

     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 

這工作正常,因爲它從我的合同控制器返回預期的操作視圖。

但是我想修改這個來接受一個id到List動作中。我知道我需要改變List方法來接受一個參數,這裏沒有問題,但是它與路徑有關,以及如何將這個參數從_Layout.cshtml文件中的RouteLink傳遞到List方法。我嘗試了一些東西,但這一點真的讓我感到困惑。

我打算通過AccountController登錄的用戶傳遞一個id,但我會問另一個問題,以保持這個更consise。

非常感謝。

回答

1

您實際上並不需要您的合同路線,因爲您的默認路線將適用於與模式控制器/操作/(此處爲可選ID參數)對應的任何控制器和操作。看到模板中的評論其實說的是Parameter defaults。這意味着,如果沒有Controller,Action或id傳入,它將默認爲這些值。這就是爲什麼你可以瀏覽到網站的根目錄和主控制器的索引操作是默認的呼叫。

使用的路線,你需要記住的是,路由參數名稱需要在你的行動相匹配的參數名稱。例如,你的默認路由目前可以讓你做到這一點:

[HttpGet] 
public ActionResult MyAction(int id) { 

} 

但是,如果你改變了你的默認路由是這樣的:

routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{myIDParameter}", // URL with parameters 
     new { controller = "Home", action = "Index", myIDParameter = UrlParameter.Optional } // Parameter defaults 
    ); 

..your索引操作將不再整數參數綁定正確..你將不得不改變的動作是:

[HttpGet] 
public ActionResult MyAction(int myIDParameter) { 

} 

在回答你的問題,它可能會更有意義,使用ActionLink的,像其他兩個你已經有:

@Html.ActionLink("Contracts", "Contract", "ActionMethodHere", new { id = UserIdHere }, null) 

即假定不過,你刪除了合同路線,只使用默認路線。

+0

這是否意味着如果我不想讓參數顯示在我的URL中,那麼通過僅通過ActionLink傳入參數,默認路徑仍然可以工作? – XN16 2012-08-04 10:57:59

+0

這是正確的。如果你需要更多的參數,那麼你會創建一個允許更多參數的單獨路由,或者將它們傳遞給查詢字符串。這樣,您的默認路線保持不變,未來的控制器會按預期繼續工作。 – 2012-08-04 11:00:38