2012-03-23 4 views
0

Я пытаюсь написать страницу в asp.net для обновления пользовательского объекта из состояния сеанса, и я бегу в проблему сдачи объекта обратно в состояние сеансасостояния сеанса не будет обновлять

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Text.RegularExpressions; 

public partial class UpdateAccount : System.Web.UI.Page 
{ 
cAccount account; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Session["account"] != null) 
    { 
     account = (cAccount)Session["account"]; 

     lblID.Text = account.AccountNumber.ToString(); 
     txtEmail.Text = account.Email; 
     txtFirstName.Text = account.FirstName; 
     txtLastName.Text = account.LastName; 
     lblArtist.Text = account.Artist.ToString(); 

     if (account.CardNumber != "") 
     { 
      ddlCardType.SelectedValue = account.CardType; 
      txtNumber.Text = account.CardNumber; 
      ddlMonth.SelectedIndex = (account.ExpMonth - 1); 
      txtExpYear.Text = account.ExpYear.ToString(); 
     } 
     else 
     { 
      ddlCardType.SelectedIndex = 0; 
      txtNumber.Text = ""; 
      ddlMonth.SelectedIndex = 0; 
      txtExpYear.Text = ""; 
     } 
    } 
    else 
    { 
     lblID.Text = "-1"; 
     txtEmail.Text = ""; 
     txtFirstName.Text = ""; 
     txtLastName.Text = ""; 
     lblArtist.Text = ""; 

     ddlCardType.SelectedIndex = 0; 
     txtNumber.Text = ""; 
     ddlMonth.SelectedIndex = 0; 
     txtExpYear.Text = ""; 
    } 
} 

protected void btnUpdateUser_Click(object sender, EventArgs e) 
{ 
    if (txtOldPass.Text == account.Password) 
    { 
     lblOldPass.Text = ""; 
     account.setDetails(txtEmail.Text, txtFirstName.Text, txtLastName.Text); 
     Session["account"] = account; 
     Response.Redirect("Accounts.aspx"); 
    } 
    else 
    { 
     lblOldPass.Text = "Password Incorrect"; 
    } 

} 
} 

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

EDIT

Точная проблема я получаю обновленный объект не спасутся государству сессии. Старый остается на странице загрузки этой страницы и страницы, которую я использую для отображения объекта. Метод Form_Load работает одинаково в обоих.

+0

Можете ли вы описать то, что ваша проблема на самом деле, пожалуйста? Это непонятно из вопроса, который вы опубликовали. Вы получаете исключение, информация об учетной записи не обновляется, как ожидалось? – KazR

+0

@RMDan Вам нужно проверить 'if (Session [" account "]! = Null)' на каждом PostBack ?. Я думаю, вы должны проверить, является ли '! Page.IsPostback' перед вашим' if (Session ["account"]! = Null) ' –

+0

@ r.piesnikowski Я пробовал это, но он вызывает разные ошибки (объект учетной записи недоступен к другим методам). Добавление этого на другую страницу не имеет значения. – RMDan

ответ

0

Похоже, что здесь происходит:

  1. Пользователь переходит на страницу:

    • Page_Load пожары, поднимает детали от объекта учетной записи, хранящейся в сессии.
  2. Пользователь заполняет деталь формы, нажимает на кнопку пользователя обновления:

    • Page_Load пожары, поднимают детали от объекта учетной записи, хранящийся в сессии, перезаписи введенных данных пользователя.
    • btnUpdateUser_Click запускает, устанавливает детали на основе текущих значений в элементах формы, которые уже установлены на старые значения.

Так что нет ничего плохого в обработчик события клика, но Page_Load деятельность должна обрабатывать почту обратно лучше, т.е .:

if (!Page.IsPostBack) 
{ 
    if (Session["account"] != null) 
    { 
    .... the rest of your stuff here .... 
    } 
} 
Смежные вопросы