路线反映分层网址/菜单结构

时间:2012-01-16 07:04:46

标签: asp.net-mvc asp.net-mvc-3 routing

我创建了一个基本的mvc3网站,每个控制器代表一个url结构中的第一个文件夹。

例如,下面的“食物”和“饮料”文件夹是控制器。只有两个控制器包含其中的所有子项。

即在示例的第一行中,controller = food,method = asian

在第二行控制器= food,method = pad-thai等等。

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 / to food controller and asian index method ??

1 个答案:

答案 0 :(得分: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
                }
            );

您的问题并未包含有关您的实施的详细信息,因此,如果您希望扩展任何内容,请更新您的问题。