asp.net多个url指向同一个控制器

时间:2012-02-22 06:26:26

标签: c# asp.net-mvc social-networking

我正在建立社交网站,我们正在实施个人资料,页面,群组等。在此阶段,我们正在处理个人资料和网页。他们都有墙,用户可以放置一些状态,图片等,更像Facebook墙。

现在可以通过两个不同的URL访问控制器WallController。

www.mysite.com/profile/121/some-user/wall
and
www.mysite.com/page/222/some-page/wall

在页面的左侧,我加载了一些基本信息(名称等)和菜单。 说

www.mysite.com/profile/121/some-user/photos
www.mysite.com/profile/121/some-user/videos
www.mysite.com/profile/121/some-user/songs

这适用于(页面和个人资料)。

这是我的页面路线

   routes.MapRoute(
           "Page-wall", // Route name
           "page/{id}/{name}/wall", // URL with parameters
           new { controller = "wall", action = "details", id = "", name = "" },
           new { id = @"\d+" },
           new string[] { "PagesNameSpace.Controllers" } // Parameter defaults
           );

和个人资料

      routes.MapRoute(
           "profile-wall", // Route name
           "profile/{id}/{name}/wall", // URL with parameters
           new { controller = "wall", action = "details", id = "", name = "" },
           new { id = @"\d+" },
           new string[] { "ProfileNameSpace.Controllers" } // Parameter defaults
           );

现在,问题是,我必须确定访问网址的对象是什么。这是我的WallController

public class WallController : Controller
{
     public ActionResult Details(long id, string name)
     {

        return View(LoadWallData(id));
     }

}

我将路由值字典视为一种解决方案,但我想看看,这种情况的最佳解决方案是什么。

帮助将不胜感激。

此致 Parminder

3 个答案:

答案 0 :(得分:1)

我可能会执行以下操作,您只需将值添加到路线中:

更改您的控制器:

public class WallController : Controller
{
     public ActionResult Details(long id, string name, string obj)//added param
     {

        return View(LoadWallData(id));
     }
}

然后你的路线:

routes.MapRoute(
           "Page-wall", // Route name
           "page/{id}/{name}/wall", // URL with parameters
           new { controller = "wall", action = "details", id = "", name = "",
                                                   /*See this>>>> */ obj="page"},
           new { id = @"\d+" },
           new string[] { "PagesNameSpace.Controllers" } // Parameter defaults
           );

routes.MapRoute(
           "profile-wall", // Route name
           "profile/{id}/{name}/wall", // URL with parameters
           new { controller = "wall", action = "details", id = "", name = "",
                                             /*See this>>>> */ obj="profile" },
           new { id = @"\d+" },
           new string[] { "ProfileNameSpace.Controllers" }
           );

答案 1 :(得分:0)

使用((System.Web.Routing.Route)(Url.RequestContext.RouteData.Route)).Url,您可以从MapRoute获取带有参数值的网址。

答案 2 :(得分:0)

我觉得,我会采用这种方法。

public class WallController : Controller
{
 public ActionResult Details(string type ,long id, string name)//added param
 {

    return View(LoadWallData(id));
 }
 }

和我的路线

routes.MapRoute(
       "wall-default", // Route name
       "{type}/{id}/{name}/wall", // URL with parameters
       new { controller = "wall", action = "details", id = "", name = "",
                                                               type="profile"},
       new { id = @"\d+" },
       new string[] { "PagesNameSpace.Controllers" } // Parameter defaults
       );

现在只需传递type参数,我就可以获得页面和个人资料的动作链接。

非常感谢大家。

此致