Asp.net MVC сохранить объект в живых, информация - PullRequest
2 голосов
/ 29 сентября 2011

у меня есть этот код

[HttpPost]
public ActionResult Index(LoginModel loginModel)
{
    if (ModelState.IsValid)
    { 
       // some lines of code . bla bla bla
       TempData["loginModel"] = loginModel;
       return RedirectToAction("index", "premium");
     }
     ...
}

и этот контроллер здесь

public ActionResult Index()
{
   var loginModel = TempData["loginModel"] as LoginModel;
   ...
}

теперь, когда страница загружается, кажется, все работает нормально. но когда я обновляюсь, все портится, он говорит, что loginModel походит на нуль. вопрос в том, как я могу отслеживать текущие входящие пользователи. У меня включена проверка подлинности форм. Тпй

ошибка как показано ниже


Object reference not set to an instance of an object.

Description: An unhandled exception occurred during the execution of the current web     request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error: 


Line 22: 
Line 23:             var loginModel = TempData["loginModel"] as LoginModel;
Line 24:             string username = loginModel.username;
Line 25:             string password = loginModel.password;
Line 26:             premiumModel.username = username;

Ответы [ 4 ]

6 голосов
/ 19 июня 2013

Путаница

но когда я обновляюсь, все портится, он говорит, что loginModel похож на нуль

Ответить

Это связано с тем, что вы прочитали клавишу TempData, и после прочтения данные будут потеряны для этого конкретного ключа.

var Value = TempData["keyName"] //Once read, data will be lost

Вопрос

как мне отслеживать текущие входящие пользователи

Ответ

Итакчтобы сохранить данные даже после того, как данные прочитаны, вы можете «оживить» их, как показано ниже:

var Value = TempData["keyName"];
TempData.Keep();                 //Data will not be lost for all Keys
TempData.Keep("keyName");        //Data will not be lost for this Key

TempData также работает в новых вкладках / Windows, как переменная Session.

Youможно использовать Session Переменная также, Единственная серьезная проблема в том, что Session Переменная очень тяжелая по сравнению с TempData.Наконец, вы также можете хранить данные в контроллерах / областях.

Надеюсь, этот пост вам очень поможет.

2 голосов
/ 29 сентября 2011

Вам нужно сохранить личность пользователя (имя пользователя) только после аутентификации пользователя - пароль не требуется.Таким образом, аутентификация ASP.NET уже поддерживает сохранение личности пользователя в файле cookie аутентификации, и вам не нужно заново изобретать колесо.Вы можете получить удостоверение, используя свойство Controller.User .

РЕДАКТИРОВАТЬ: Я предполагаю, что вы правильно настроили приложение для проверки подлинности с помощью форм.Независимо от этого, вот несколько ссылок с практическими рекомендациями / учебниками, с которых вы начинаете:

  1. http://www.apexa.net/Blog/web_design_Blog_20100319.aspx
  2. http://www.asp.net/mvc/tutorials/authenticating-users-with-forms-authentication-cs
  3. Объясните решение, чтобы вам не приходилось применять атрибут Authorize для каждого действия - http://blogs.msdn.com/b/rickandy/archive/2011/05/02/securing-your-asp-net-mvc-3-application.aspx
1 голос
/ 29 сентября 2011

Я предлагаю вам создать новый проект MVC 3 в Visual Studio через Файл> Создать.Он настроит для вас аутентификацию на основе форм, чтобы вы могли ознакомиться с лучшими практиками для страниц входа и регистрации, входа пользователя в систему с файлом cookie сеанса и отображения информации о пользователе, такой как имя пользователя.

1 голос
/ 29 сентября 2011

TempData действительно только для одного запроса.Поэтому он пуст, когда вы делаете второй запрос.Если вы хотите сделать это таким образом, вы должны использовать Session вместо этого или вы можете взглянуть на аутентификацию форм .

Вы также должны учитывать рекомендации VinayC и не хранить парольинформация в любом состоянии, особенно не в текстовом формате.

...