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