2013-04-08 2 views
3

В следующем примере я извлек ненужный код. Я создал поле под названием printString. Метод calculateButton_Click делает кучу вещей, затем я хочу отправить его на страницу с печатью, используя response.write. Однако переменная printString, кажется, никогда не перестает быть «ПО УМОЛЧАНИЮ». DEFAULT - это все, что появляется на моей пустой странице, когда я нажимаю printButton_Click. Обрезной код ниже:Переменная возвращаемость к инициализированному значению

public partial class _Default : System.Web.UI.Page 
    { 
     private string _printString = "DEFAULT"; 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      Response.Buffer = true; 
     } 

     protected void calculateButton_Click(object sender, EventArgs e) 
     { 
      _printString = ""; 

_printString = "HARRY POTTER™: THE EXHIBITION Invoice<BR>Today's date: " + DateTime.Today.ToString("dd/MM/yyyy") + "<BR>Visit date: " + 
      dateSelectedString + "<BR><BR><BR>Adult tickets: " + numAdult + "<BR>Child tickets: " + numChild + "<BR>Family Passes: " + numFamily + 
      "<BR>Payment method: " + paymentType + "<BR>Total to pay: $" + totalPrice.ToString("0.00"); 

    } 

    protected void printButton_Click(object sender, EventArgs e) 
    { 
     Response.Clear(); 
     Response.Write(_printString); 
     Response.Flush(); 
     Response.End(); 
    } 
} 

ответ

2

При printButton нажатии он использует значение DEFAULT с момента, когда переменная создается.

private string _printString = "DEFAULT"; 

Является ли ваша проблема. При изменении переменной необходимо сохранить состояние printString. Просто присвоение _printString другому значению не сохраняет изменения. Вы можете либо написать функцию, чтобы назначить _printString правильному значению при нажатии printButton, использовать ViewState или Session или назначить _printString в функции щелчка printButton, как показано ниже.

protected void printButton_Click(object sender, EventArgs e) 
{ 
    _printString = "Harry Potter"; 

    Response.Clear(); 
    Response.Write(_printString); 
    Response.Flush(); 
    Response.End(); 
} 

будет приводить к Harry Potter время писал на эту страницу.

Чтобы использовать Session:

protected void calculateButton_Click(object sender, EventArgs e) 
{ 
     _printString = "HARRY POTTER™: THE EXHIBITION Invoice<BR>Today's date: " + DateTime.Today.ToString("dd/MM/yyyy") + "<BR>Visit date: " + 
     dateSelectedString + "<BR><BR><BR>Adult tickets: " + numAdult + "<BR>Child tickets: " + numChild + "<BR>Family Passes: " + numFamily + 
     "<BR>Payment method: " + paymentType + "<BR>Total to pay: $" + totalPrice.ToString("0.00"); 

     Session["PrintString"] = _printString; 
} 

protected void printButton_Click(object sender, EventArgs e) 
{ 
    _printString = (string)Session["PrintString"]; 

    Response.Clear(); 
    Response.Write(_printString); 
    Response.Flush(); 
    Response.End(); 
} 

ViewState:

ViewState["PrintString"] = "HarryPotter"; 

Затем, чтобы получить значение, которое вы можете просто сделать:

_printString = (string)ViewState["PrintString"]; 

http://msdn.microsoft.com/en-gb/library/ms972976.aspx

+0

Как пройти через гигантские строки из метода рассчитайте? В Java мы делаем это, используя поля. – Rothmanberger

+0

«ViewState» также очень подходит для хранения таких данных между нажатиями кнопок. – nunespascal

+0

@nunespascal - да, я включил это в свой пост. –

2

Все (экземплярные) переменные расположены в конце жизненного цикла страницы, поскольку HTTP не имеет статуса (даже элементы управления). Вместо этого вы можете использовать переменную ViewState, HiddenField или Session.

private string PrintString 
{ 
    get 
    { 
     if (ViewState["PrintString "] == null || string.IsNullOrEmpty((String)ViewState["PrintString"])) 
     { 
      ViewState["PrintString"] = "DEFAULT"; 
     } 
     return ViewState["PrintString"].ToString(); 
    } 
    set { ViewState["PrintString"] = value; } 
} 

Есть и другие варианты:

Nine Options for Managing Persistent User State in Your ASP.NET Application

1

Кнопка нажмите событие вызывает постбэк и значение _printString это не сохранялось. Вы должны хранить его в методе рассчитайте через Session или Viewstate, а затем установить его в печати, например: -

protected void calculateButton_Click(object sender, EventArgs e) 
{ 
    _printString = ""; 
    _printString = "HARRY POTTER™: THE EXHIBITION Invoice<BR>Today's date: " + DateTime.Today.ToString("dd/MM/yyyy") + "<BR>Visit date: " + 
     dateSelectedString + "<BR><BR><BR>Adult tickets: " + numAdult + "<BR>Child tickets: " + numChild + "<BR>Family Passes: " + numFamily + 
     "<BR>Payment method: " + paymentType + "<BR>Total to pay: $" + totalPrice.ToString("0.00"); 
    Session["bigstring"] = _printString; 
} 

protected void printButton_Click(object sender, EventArgs e) 
{ 
    Response.Clear(); 
    _printString = Session["bigstring"].ToString(); 
    Response.Write(_printString); 
    Response.Flush(); 
    Response.End(); 
} 
+0

Большое спасибо – Rothmanberger

Смежные вопросы