Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET MVC:正在保存状态??使用会话?_Asp.net Mvc - Fatal编程技术网

Asp.net mvc ASP.NET MVC:正在保存状态??使用会话?

Asp.net mvc ASP.NET MVC:正在保存状态??使用会话?,asp.net-mvc,Asp.net Mvc,我想知道是否有人可以帮忙,我希望在当前页面上为当前用户全局保存一个变量,我认为mvc中的会话不好 我应该举一个我正在做的例子。基本上我有一个控制器,它进入(Action=Index),然后我检查 Request.UrlReferrer 如果它包含一个值,这意味着它来自另一个地方,例如谷歌。我把信息写在日志里。现在在控制器的这个阶段,一切都很好 但是稍后在我的页面中,我想回忆一下控制器中的一个方法(使用jquery和ajax)来处理更多的跟踪,但记住我仍然在同一页面中,我使用 Request.

我想知道是否有人可以帮忙,我希望在当前页面上为当前用户全局保存一个变量,我认为mvc中的会话不好

我应该举一个我正在做的例子。基本上我有一个控制器,它进入(Action=Index),然后我检查

Request.UrlReferrer
如果它包含一个值,这意味着它来自另一个地方,例如谷歌。我把信息写在日志里。现在在控制器的这个阶段,一切都很好

但是稍后在我的页面中,我想回忆一下控制器中的一个方法(使用jquery和ajax)来处理更多的跟踪,但记住我仍然在同一页面中,我使用

 Request.UrlReferrer
但在这个阶段,它始终是页面的名称,因为引用者是发起ajax调用的页面,“不是”google。好的,看来我需要将值或URLreferer保存到一个全局变量/每个用户,这样当我重新进入控制器时,我可以检查这个保存的变量,而不是Request.URLreferer

有人知道最简单的方法吗

下面是我的页面示例

public ActionResult Index()
    {
        // Process tracking - Initial entry
        string ip = Request.UserHostAddress.ToString();
        string referrer = null;

        if (Request.UrlReferrer !=null)
            referrer = Request.UrlReferrer.ToString();

        // WRITE THE LOGS HERE!!!!

        return View();
    }

    public ActionResult ProcessTracking()
    {
        // Reprocess tracking
        // BUt can't use Request.UrlReferrer as it returns my calling page and not google
        // for example




        //string ip = Request.UserHostAddress.ToString();
        //string referrer = null;

        //if (Request.UrlReferrer != null)
        //    referrer = Request.UrlReferrer.ToString();

        //return View();
    } 

可以使用会话包存储Request.urlReferer的第一个值。但与WebForms一样,请确保在会话变量未使用时将其删除。此持久性的另一个选项可以是cookies或ASP.NET MVC TempData包,在MVC 1.0中,只能在重定向到另一个页面之前使用,在MVC 2.0测试版中,TempData仅在读取时(或会话过期时)才会清除


Lucas Oleiro

可以使用会话包存储Request.urlReferer的第一个值。但与WebForms一样,请确保在会话变量未使用时将其删除。此持久性的另一个选项可以是cookies或ASP.NET MVC TempData包,在MVC 1.0中,只能在重定向到另一个页面之前使用,在MVC 2.0测试版中,TempData仅在读取时(或会话过期时)才会清除


Lucas Oleiro

您应该将值存储在TempData中。TempData的全部目的是在控制器调用之间保存信息。从MVC2测试版开始,该值将一直保留到读取为止

public ActionResult Index()
{        
// Process tracking - Initial entry        
string ip = Request.UserHostAddress.ToString();        
string referrer = null;        
if (Request.UrlReferrer !=null)            
referrer = Request.UrlReferrer.ToString(); 
TempData["referrer"] = referrer;   
// WRITE THE LOGS HERE!!!!        
return View();    
}    

public ActionResult ProcessTracking()    
{        
// Reprocess tracking        
// BUt can't use Request.UrlReferrer as it returns my calling page and not google        
// for example        
string ip = Request.UserHostAddress.ToString();        
string referrer = TempData["referrer"];        
//continue processing here   
return View();    
}

您应该将该值存储在TempData中。TempData的全部目的是在控制器调用之间保存信息。从MVC2测试版开始,该值将一直保留到读取为止

public ActionResult Index()
{        
// Process tracking - Initial entry        
string ip = Request.UserHostAddress.ToString();        
string referrer = null;        
if (Request.UrlReferrer !=null)            
referrer = Request.UrlReferrer.ToString(); 
TempData["referrer"] = referrer;   
// WRITE THE LOGS HERE!!!!        
return View();    
}    

public ActionResult ProcessTracking()    
{        
// Reprocess tracking        
// BUt can't use Request.UrlReferrer as it returns my calling page and not google        
// for example        
string ip = Request.UserHostAddress.ToString();        
string referrer = TempData["referrer"];        
//continue processing here   
return View();    
}

谢谢,是的,这正是我想要的!我刚刚测试了它,它似乎工作,但我有一个问题。在我在ASPNET MVC 1.0中读到它之前,它还在吗??还是不。。我假设它不是一个全局变量,因此,如果我有两个用户,那么该变量不会覆盖另一个?TempData的作用域在请求的上下文中,因此它不会被同时的用户覆盖。在MVC 1.0中,TempData将在下次控制器调用时清除。这意味着,如果有一个控制器操作被调用(包括ajax调用),那么数据将只在下一次调用时可用。如果您需要更多调用的数据,则需要让每个操作“触摸”数据:TempData[“referer”]=TempData[“referer”];有点黑?是的,但是MVC团队已经为MVC 2解决了这个问题,所以它会变得更好!没问题!很高兴我能帮忙。:)谢谢,是的,这正是我想要的!我刚刚测试了它,它似乎工作,但我有一个问题。在我在ASPNET MVC 1.0中读到它之前,它还在吗??还是不。。我假设它不是一个全局变量,因此,如果我有两个用户,那么该变量不会覆盖另一个?TempData的作用域在请求的上下文中,因此它不会被同时的用户覆盖。在MVC 1.0中,TempData将在下次控制器调用时清除。这意味着,如果有一个控制器操作被调用(包括ajax调用),那么数据将只在下一次调用时可用。如果您需要更多调用的数据,则需要让每个操作“触摸”数据:TempData[“referer”]=TempData[“referer”];有点黑?是的,但是MVC团队已经为MVC 2解决了这个问题,所以它会变得更好!没问题!很高兴我能帮忙。:)