2012-01-16 11 views
1

各コントローラがURL構造の最初のフォルダを表す基本的なmvc3ウェブサイトを作成しました。階層的なURL /メニュー構造を反映するルート

たとえば、以下の「食品」と「ドリンク」フォルダはコントローラです。その中にすべてのサブ項目を含むコントローラーは2つだけです。

すなわち実施例の最初の行に、ように等セカンドラインコントローラ=食品、方法=パッド・タイおよびコントローラ=食品、方法=アジア

www.mysite.com/food/asian/ www.mysite.com/food/asian/pad-thai www.mysite.com/food/italian/chicken-parmigiana www.mysite.com/drinks/cocktails/bloody-mary

www.mysite.com/food/asian/pad-thaiがそのコントローラー内のフードコントローラーと有料のタイメソッドに誘導するように、どのようにルートを書きますか? www.mysite.com/food/asian/から食品管理者とアジアのインデックス方法に送信するには?

答えて

3

MVCデザインパターンは、URLをフォルダ構造を指すように書き換えるためのものではありません。これを行うことができますが、それは確かにその主な目的ではありません。静的コンテンツのURL構造を作成する場合は、IISに組み込まれたURL rewritingの機能を使用する方が簡単です。上記の例を使用

public class FoodController : Controller 
{ 
    public ActionResult ViewDishByTag(string itemType, string itemTag) 
    { 

    // If an itemType is displayed without itemTag, return an 'index' list of possible dishes... 

    // Alternatively, either return a "static" view of your page, e.g. 
    if (itemTag== "pad-thai") 
     return View("PadThai"); // where PadThai is a view in your shared views folder 

    // Alternatively, look up the dish information in a database and bind return it to the view 
    return ("RecipeView", myRepo.GetDishByTag(itemTag)); 
    } 
} 

、あなたのルートは次のように少し見えるかもしれません:あなたは、完全なMVCアプリケーションを作成する場合

は、例えば、あなたの意見を提供するためにFoodControllerDrinkControllerを設定

routes.MapRoute(
       "myRoute", 
       "{controller}/{itemType}/{itemTag}", 
       new 
       { 
        controller = UrlParameter.Required, 
        action = "ViewDishByTag", 
        itemtype = UrlParameter.Optional, 
        itemTag = UrlParameter.Optional 
       } 
      ); 

あなたの質問には実装に関する詳細が含まれていないので、何かを広げたいのであれば、質問を更新してください。

+0

あなたの説明に感謝します。 – Dkong

関連する問題