2015-07-06 7 views
0

Я только начал изучать ASP.NET, и у меня возникла проблема с получением значений текстового поля. Я хочу сделать простой калькулятор только с четырьмя основными операциями, но происходит то, что после того, как я нажимаю знак + и нажимаю «Go», я вижу, что я не сохранил первый номер вообще. Второе число все равно. Вот пример моего кода.Почему я не могу получить значение из текстового поля?

public partial class deafult : System.Web.UI.Page 
{ 
    public TextBox output = new TextBox(); 
    public double temp,tempAdd, calc; 

    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected void btnAdd_Click(object sender, EventArgs e) 
    { 
     tempAdd = Convert.ToDouble(output.Text); 
     output.Text = String.Empty; 
    } 
    //User enters another number after clicking Add button then clicks Proc 
    protected void proc_Click(object sender, EventArgs e) 
    { 
     temp = Convert.ToDouble(output.Text); 
     calc = tempAdd + temp; 
     output.Text = calc.ToString(); 
    } 
} 

Я отлаживал, и tempAdd всегда 0, но я получаю номер в темпе. переменные temp и calc определены публично.

ответ

1

У вас по существу проблема с повторной инициализацией всех переменных при загрузке страницы. В отличие от winforms, web is stateless.

Однако существуют способы сохранения состояния между обновлениями. Наиболее очевидным выбором для вашего приложения было бы только перейти на сервер один раз с обоими значениями и то, что вы хотите с ними делать. т.е. одним нажатием кнопки.

Однако для личного назидания, возможно, стоит посмотреть вверх ViewState. Это позволяет хранить значения в массиве сортировки и извлекать их даже после обновления.

В ASP.NET также есть массивы уровня Session и Application, которые работают аналогичным образом.

0

Каждый раз, когда вы вызываете страницу (по событиям), все ваши свойства инициализируются. Попробуйте сделать всю свою логику в одним событием или сохраните ваши объекты в менеджере/службе/db.

0

В Интернете (Asp.Net) для каждого свойства postback будут очищены, попробуйте использовать переменные ViewState или Session для хранения этих значений. Ознакомьтесь с концепциями управления Asp.Net State Management от MS.

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

0

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

Ex: -

protected void btnAdd_Click(object sender, EventArgs e) 
    { 
     Session["tempAdd"] = output.Text; 
     output.Text = String.Empty; 
    } 

    protected void proc_Click(object sender, EventArgs e) 
    { 
     temp = Convert.ToDouble(output.Text); 
     string oldval=Session["tempAdd"] != null ?Session["tempAdd"].ToString() :""; 
     if(oldval!="") 
      tempadd=Convert.ToDouble(oldval); 

     calc = tempAdd + temp; 
     output.Text = calc.ToString(); 
    } 
+0

Как я могу проверить, если значения сессий пустым, так что я могу сделать 4 разных операции, используя только одну кнопку? i try if (! string.IsNullOrEmpty (Session ["tempAdd"] как строка)), но потом я снова не получил значений – gadria

+0

@gadria, я немного путаю то, что вы просите ..will u plz уточните немного больше .. –

+0

Я хочу сделать это для сложения, вычитания, умножения, деления. каждый из них имеет эту логику сеанса в своем методе onclick. Когда я нажимаю «proc», я хочу знать значение в сеансе, чтобы я знал, какую операцию делать. – gadria

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