如何在路径中检索站点范围的URL参数,而不会使用参数混乱每个控制器操作?我的问题类似于
this question,但我想避免使用ModelBinder的混乱. IE浏览器.在Global.asax.cs中:
routes.MapRoute( "Default",// Route name "{sitename}/{controller}/{action}/{id}",new { sitename = "",controller = "SomeController",action = "Index",id = "" } );
所以,而不是SomeController类中的以下内容:
public ActionResult Index(string sitename) { SiteClass site = GetSite(sitename); ... return View(site.GetViewModel()); }
我宁愿拥有以下内容:
public ActionResult Index() { SiteClass site = CurrentSite; // where CurrentSite has already retrieved data based on unique URL sitename parameter. ... return View(site.GetViewModel()); }
也许这可以通过控制器范围的动作过滤器来实现? OnActionExecuting?
解决方法
首先添加一个到Global.aspx.cs的路由来传递{sitename}参数:
routes.MapRoute( "Sites",// URL with parameters new { sitename = "",controller = "Home",id = "" } // Parameter defaults );
然后在基本控制器中添加以下简单代码:
public class BaseController: Controller { public string SiteName = ""; protected override void OnActionExecuting(ActionExecutingContext filterContext) { HttpRequestBase req = filterContext.HttpContext.Request; SiteName = filterContext.RouteData.Values["sitename"] as string; base.OnActionExecuting(filterContext); } }
并在派生控制器中使用:
public class HomeController: BaseController { public ActionResult Index() { ViewData["SiteName"] = SiteName; return View(); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。