Model view controller 控制器动作历史记录

Model view controller 控制器动作历史记录,model-view-controller,session,controller,action,Model View Controller,Session,Controller,Action,我的ASP.NET MVC intranet应用程序有一个数据存储库,它使用当前用户的Windows登录来检索属于用户默认主站点的数据。登录名包含站点标识符。repository类是访问HttpContext.Current.User.Identity并从登录中提取站点id的唯一位置。因此,应用程序仅为一个用户站点的数据提供服务。现在,我们的要求已经改变,用户可以通过从站点菜单单击不同的站点名称链接来查看其他站点的数据。站点菜单位于母版页中。当用户单击任何站点链接时,需要更新站点范围,然后重新执

我的ASP.NET MVC intranet应用程序有一个数据存储库,它使用当前用户的Windows登录来检索属于用户默认主站点的数据。登录名包含站点标识符。repository类是访问HttpContext.Current.User.Identity并从登录中提取站点id的唯一位置。因此,应用程序仅为一个用户站点的数据提供服务。现在,我们的要求已经改变,用户可以通过从站点菜单单击不同的站点名称链接来查看其他站点的数据。站点菜单位于母版页中。当用户单击任何站点链接时,需要更新站点范围,然后重新执行在使用新站点范围单击站点链接之前执行的操作。例如,如果用户执行请求列表,默认情况下,它将仅显示来自用户默认站点的请求。当用户单击另一个站点时,它将显示该站点的请求。应用程序中有许多控制器操作,我不希望修改每个控制器和现有路由的每个操作。我正在考虑创建一个新的控制器,用一个动作来设置站点范围,但我不知道如何让它知道在执行新控制器的动作之前执行了什么动作。我应该使用会话变量来保持范围更改吗?动作过滤器是重新设计我的应用程序的更好方法吗?任何关于代码示例的建议都将不胜感激。谢谢。

我最终创建了一个新的控制器,其中包含一个创建会话变量的操作,然后执行重定向。在存储库中,将检查会话变量是否与用户的主站点相同。如果会话变量的作用域不同,则返回会话变量的值。SiteController.Index()的Index.aspx返回一个UserControl

<%@ Control Language="C#"    Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<VETS.Models.Site>>" %>
<ul id="menu">
    <% foreach (var item in Model)
       { %>

    <li><%: Html.ActionLink(item.SiteName, "SetSiteScope", new { siteID = item.SiteID })%></li>
    <%
       } %>
</ul>

public class SiteController : Controller 
{
    public ActionResult SetSiteScope(short siteID)
    {
        HttpContext.Session.Add("CurrentSiteID",siteID);
        //var routeData = ControllerContext.RouteData;
        //routeData.Route.ToString();
        //var actionName = ControllerContext.RouteData.GetRequiredString("action");
        //return RedirectToAction(actionName, "Transfers");
        Uri prevURL = HttpContext.Request.UrlReferrer;
        return Redirect(prevURL.ToString());
    }
}

public class vRepository : IvRepository
{
    public Site CurrentSite()
    {

      if (HttpContext.Current.Session != null && HttpContext.Current.Session["CurrentSiteID"] != null)
      {
        targetSiteID = short.Parse(HttpContext.Current.Session["CurrentSiteID"].ToString());
        targetSite = SiteList().Single(s => s.SiteID == targetSiteID);
      }
      return targetSite;
    }
}

公共类SiteController:控制器 { 公共操作结果集SiteScope(短站点ID) { HttpContext.Session.Add(“CurrentSiteID”,siteID); //var routeData=ControllerContext.routeData; //routedData.Route.ToString(); //var actionName=ControllerContext.RouteData.GetRequiredString(“操作”); //返回重定向操作(actionName,“传输”); Uri prevURL=HttpContext.Request.urlReferer; 返回重定向(prevURL.ToString()); } } 公共类存储库:IvRepository { 公共站点CurrentSite() { if(HttpContext.Current.Session!=null&&HttpContext.Current.Session[“CurrentSiteID”!=null) { targetSiteID=short.Parse(HttpContext.Current.Session[“CurrentSiteID”].ToString()); targetSite=SiteList().Single(s=>s.SiteID==targetSiteID); } 返回目标站点; } }