2013-04-01 76 views
0

我有以下頁面結構在asp.net mvc的4如何構建Actionlinks

Department   Full Time Employees  Part Time Employees 
-----------   --------------------------------------------- 
Department 1   |1. Employee 1     
Department 2   |2. Employee 2 
         | 

其中一部,二部,全職員工和兼職員工的鏈接。點擊任何鏈接都會顯示一些員工。以下是可能的選項

  1. 當用戶首次瀏覽該頁面時,會顯示第一個部門(部門1)中的全職員工。
  2. 當用戶點擊部門2時,將顯示部門2的全職員工(因爲全部時間鏈接已被默認選中)
  3. 當用戶單擊部分時間時,顯示所選部門的兼職員工。

我不知道如何構建這些不同鏈接的動作鏈接。 ,我瞄準目標的結果是一樣的東西

  1. www.example.com/Department1/fulltime
  2. www.example.com/Department1/parttime
  3. www.example.com/Department2/fulltime
  4. www.example.com/Department2/parttime

    感謝

更新

這裏的問題是如何構建操作鏈接,而不是如何將它們路由到控制器。目前我確實有一個行動是我的家庭控制器,它接受部門和全職/兼職。我無法弄清楚的是如何跟蹤事情。例如,如果用戶在已選擇部門2時單擊部分時間鏈接,那麼部分時間的鏈接如何將選定部門傳達給操作方法,以便控制器知道它必須顯示選定部門的兼職員工。與部分時間選擇類似,如果用戶單擊部門,部門鏈接如何將信息傳達給控制器,以便它必須在單擊的部門中顯示兼職員工。

+0

檢查[自定義路由](http://www.codeproject.com/Articles/299531/Custom-routes-for-MVC-Application) – Artless

回答

0

據我瞭解,我認爲你需要的是路由。看看

MVC.Net Routing

和接受的答案。有一個簡單的解釋如何創建自定義路線來實現你上面描述的。您需要創建一個控制器,其中包含兩個參數string department和另一個參數(字符串或枚舉或DefaultModelBinder可綁定的任何東西)的動作,然後將您的路由映射到此控制器和操作。

由於路由工作是雙向的,因此必須正確映射路由才能創建正確的動作鏈接。正如您在msdn中看到的那樣,System.Web.Routing.Route課程也有一個虛擬方法GetVirtualPath。只要您嘗試使用Html.ActionLink-method(或其重載之一)創建動作鏈接,框架就會「查詢」路線(遵守路線約束等)。)並基於所提供的路線值建立所謂的虛擬路徑

假設你創建了一個名爲HomeController控制器,它類似於

public sealed class HomeController : Controller 
{ 
    public ActionResult Index(string department, EmployeeType employeeType) 
    { 
     /* ... */ 
    } 
} 

public enum EmployeeType 
{ 
    FullTime, 
    PartTime, 
} 

您可以創建一個ActionLink的(從任何視圖中)如下:

Html.ActionLink(
    "Full-time employees of department 1", 
    "Index", // action 
    "Home", // controller 
    new 
    { 
     department = "Department1", // first argument 
     employeeType = EmployeeType.FullTime, // second argument 
    }, 
    htmlAttributes: null); 

這就創建了一個鏈接根據您的需要一個網址只要匹配的路線正確地執行GetVirtualPath(無論這意味着什麼)。默認實現可能會創建一個url,如/Home/Index?department=Department1&employeeType=0。然後您需要從System.Web.Routing.Route派生,覆蓋並執行GetVirtualPath並在App_StartGlobal.asax中註冊路線。

+0

Plz檢查更新的問題 – ZedBee

+0

@ZedBee Plz檢查更新的答案;-) – Peit