0

假设我有事件控制器。在控制器中,我有 3 个动作:与会者、照片和消息。

如何实现以下路由模式:

  1. www.site.com/event/{eventname}
  2. www.site.com/event/{eventname}/action/
  3. www.site.com/event/{eventname}/action/{actionid}

Controller 将被称为 EventController,Action 可以是三种动作(与会者、照片和消息)中的任何一种。例如

  • www.site.com/event/ - 列出所有事件
  • www.site.com/event/autiebirthday/ - 显示 auntibirthday 活动,在此页面中将有链接到呼叫照片、消息和与会者操作。
  • www.site.com/event/autiebirthday/photos/ - 列出阿姨生日活动的所有照片。
  • www.site.com/event/autiebirthday/photos/1 - 显示 ID 为 1 的照片以及评论。

谢谢。

鲁文迪

4

2 回答 2

2

路由表:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "EventHome", // Route name
        "event/{eventName}/{action}/{id}", // URL with parameters
        new { controller = "Event", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );
}

控制器:

public class EventController : Controller
{
    public ActionResult Index(string eventName)
    {
        ViewBag.EventName = eventName;

        return View();
    }

    public ActionResult Photos(int? id)
    {
        ViewBag.Id = id;

        return View();
    }
}

请注意,我只是用来ViewBag测试路线是否有效。您自然应该使用适当的数据源进行生产。

于 2012-08-10T12:43:32.587 回答
0

我不清楚网址应该叫什么,但我认为应该这样做

routes.MapRoute("", "event/{eventname}", new { controller = "Event", action = "Messages" });
routes.MapRoute("", "event/{eventname}/action/{actionid}", new { controller = "Event", action = "Messages", actionId = UrlParameter.Optional });    
于 2012-08-10T12:14:56.360 回答