asp.net-mvc – 将{sitename}参数传递给MVC控制器操作

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 将{sitename}参数传递给MVC控制器操作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何在路径中检索站点范围的URL参数,而不会使用参数混乱每个控制器操作?我的问题类似于 this question,但我想避免使用ModelBinder的混乱. IE浏览器.在Global.asax.cs中:
  1. routes.MapRoute(
  2. "Default",// Route name
  3. "{sitename}/{controller}/{action}/{id}",new { sitename = "",controller = "SomeController",action = "Index",id = "" } );

所以,而不是SomeController类中的以下内容

  1. public ActionResult Index(string sitename)
  2. {
  3. SiteClass site = GetSite(sitename);
  4. ...
  5. return View(site.Getviewmodel());
  6. }

我宁愿拥有以下内容

  1. public ActionResult Index()
  2. {
  3. SiteClass site = CurrentSite; // where CurrentSite has already retrieved data based on unique URL sitename parameter.
  4. ...
  5. return View(site.Getviewmodel());
  6. }

也许这可以通过控制器范围的动作过滤器来实现? OnActionExecuting?

解决方法

首先添加一个到Global.aspx.cs的路由来传递{sitename}参数:
  1. routes.MapRoute(
  2. "Sites",// URL with parameters
  3. new { sitename = "",controller = "Home",id = "" } // Parameter defaults
  4. );

然后在基本控制器中添加以下简单代码

  1. public class BaseController: Controller
  2. {
  3. public string SiteName = "";
  4.  
  5. protected override void OnActionExecuting(ActionExecutingContext filterContext)
  6. {
  7. HttpRequestBase req = filterContext.HttpContext.Request;
  8. SiteName = filterContext.RouteData.Values["sitename"] as string;
  9. base.OnActionExecuting(filterContext);
  10. }
  11. }

并在派生控制器中使用:

  1. public class HomeController: BaseController
  2. {
  3. public ActionResult Index()
  4. {
  5. ViewData["SiteName"] = SiteName;
  6. return View();
  7. }
  8. }

猜你在找的asp.Net相关文章