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

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 将{sitename}参数传递给MVC控制器操作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何在路径中检索站点范围的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();
    }
}

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