2012-01-16 57 views
1

我已經創建了一個基本的mvc3網站,每個控制器代表一個url結構中的第一個文件夾。路線來反映分層url /菜單結構

例如,下面的「食物」和「飲料」文件夾是控制器。只有兩個控制器包含其中的所有子項目。

即,在該示例中,控制器=食品,方法的第一行=亞洲

在第二行控制器=食品,方法=墊泰等等等等。

www.mysite.com/food/asian/ www.mysite.com/food/asian/pad-thai www.mysite.com/food/italian/chicken-parmigiana www.mysite.com/drinks /雞尾酒/血腥瑪麗

我將如何寫路線,以便www.mysite.com/food/asian/pad-thai將指向該控制器內的食品控制器和付費泰國方法,並且還有一條規則從www.mysite.com/food/asian/發送到食品控制器和亞洲指數方法?

回答

3

MVC設計模式不適用於重寫URL以指向文件夾結構。它可以做到這一點,但它當然不是它的主要目的。如果您嘗試使用靜態內容創建URL結構,則使用內置於IIS中的URL rewriting功能可能更容易。

如果您要創建一個完整的MVC應用程序,設置和FoodControllerDrinkController服務你的意見,例如:

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)); 
    } 
} 

使用上面的例子,你的路線可能看起來有點像這樣:

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

您的問題沒有包含有關您的實施的詳細信息,因此如果您希望我擴展任何內容,請更新您的問題。

+0

感謝您的解釋。 – Dkong 2012-01-16 22:59:10