0

asp.net mvc 4 に次のページ構造があります。

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

1部、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 が既に選択されているときにユーザーがパートタイム リンクをクリックした場合、選択した部門のパートタイム従業員を表示する必要があることをコントローラが認識できるように、パートタイムのリンクは選択した部門をアクション メソッドにどのように伝えることができますか。同様に、パートタイムが選択されている場合、ユーザーが部門をクリックすると、部門のリンクは、クリックされた部門のパートタイム従業員を表示する必要があるという情報をコントローラーにどのように伝えますか。

4

1 に答える 1

0

私が理解している限り、必要なのはroutingだと思います。見て

MVC.Net ルーティング

そして受け入れられた答え。上記の目的を達成するためにカスタムルートを作成する方法の簡単な説明があります。2 つの引数を持つアクションを持つコントローラーを作成し、フルタイムまたはパートタイムstring departmentで別の引数 (文字列または列挙型、またはDefaultModelBinderバインドできるもの) を作成し、ルートをこのコントローラーとアクションにマップする必要があります。

ルーティングは双方向に機能するため、適切なアクションリンクを作成するには、ルートを正しくマッピングすることが必須です。msdnでわかるように、このSystem.Web.Routing.Routeクラスには仮想メソッドもありますGetVirtualPath。-method (またはそのオーバーロードの 1 つ)を使用してアクションリンクを作成しようとするとすぐに、フレームワークはルートを「照会」し (ルート制約を尊重するなど) 、ルート値に基づいてHtml.ActionLinkいわゆる仮想パスを構築します。提供された。

HomeController次のようなコントローラーを作成したとします。

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

public enum EmployeeType
{
    FullTime,
    PartTime,
}

次のように、(任意のビュー内から) アクションリンクを作成できます。

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 を持つリンクが作成されます。デフォルトの実装では、 のような URL/Home/Index?department=Department1&employeeType=0作成される場合があります。次に、 から派生させSystem.Web.Routing.Route、オーバーライドして実装GetVirtualPathし、ルートをApp_Startまたはに登録する必要がありますGlobal.asax

于 2013-04-01T09:46:19.717 に答える