ASP.NET MVC: сохранение состояния Использовать сеансы? - PullRequest
1 голос
/ 03 декабря 2009

Интересно, может ли кто-нибудь помочь, я хочу сохранить переменную глобально для текущего пользователя на текущей странице, я думал, что сессии в mvc плохие ??

Я должен привести пример того, что я делаю. В основном у меня есть контроллер, и он входит (Action = Index), и я проверяю

Request.UrlReferrer

И если оно содержит значение, которое означает, что оно прибыло из другого места, например, из Google. И я записываю информацию в журнал. Теперь на этом этапе в контроллере все нормально.

Но позже на моей странице я хочу вспомнить метод в контроллере (использующий jquery и ajax) для обработки некоторого отслеживания, но помня, что я все еще на той же странице, я использую

 Request.UrlReferrer

но на этом этапе всегда будет именем страницы, так как реферер - это страница, которая инициировала вызов ajax и Google "НЕ". Итак, похоже, мне нужно сохранить значение или UrlReferrer в глобальную переменную / на пользователя, чтобы при повторном входе в мой контроллер я мог проверить эту переменную SAVED, а не Request.UrlReferrer.

Кто-нибудь знает самый простой способ сделать это?

вот пример моей страницы

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();
    } 

Ответы [ 2 ]

4 голосов
/ 03 декабря 2009

Вы должны сохранить значение в TempData. Целью TempData является сохранение информации между вызовами контроллера. Начиная с MVC 2 Beta значение будет оставаться там до тех пор, пока оно не будет прочитано.

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();    
}
0 голосов
/ 03 декабря 2009

Можно использовать сессионную сумку для хранения первого значения Request.UrlReferrer. Но, как и в WebForms, убедитесь, что вы удалите переменную сеанса, так как она станет неиспользуемой. Другими вариантами такого сохранения могут быть файлы cookie или пакет ASP.NET MVC TempData, который в MVC 1.0 можно использовать только перед перенаправлением на другую страницу, а в MVC 2.0 бета-данные TempData очищаются только тогда, когда они читаются (или когда заканчивается сеанс) .

Лукас Олейро

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...