我正在建立社交网站,我们正在实施个人资料,页面,群组等。在此阶段,我们正在处理个人资料和网页。他们都有墙,用户可以放置一些状态,图片等,更像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
答案 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参数,我就可以获得页面和个人资料的动作链接。
非常感谢大家。
此致