加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 00:16:35 所属栏目:asp.Net 来源:网络整理
导读:如何在路径中检索站点范围的URL参数,而不会使用参数混乱每个控制器操作?我的问题类似于 this question,但我想避免使用ModelBinder的混乱. IE浏览器.在Global.asax.cs中: routes.MapRoute( "Default",// Route name "{sitename}/{controller}/{action}/{id}
如何在路径中检索站点范围的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();
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读