Как использовать переменные в веб-приложении на C # - PullRequest
0 голосов
/ 06 ноября 2018

Мне было поручено создать калькулятор в веб-приложении на C #, однако я заметил, что когда я использую переменные, установленные в других кнопках, программы устанавливают для них значение 0, в частности переменные 'num' и 'sign', которые я назначил в PlusBut, но при фактическом использовании их в EqualBut они присваиваются 0. Мой код работает в форме окна, но я впервые использую веб-приложение.

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

namespace WebApplication1 {
    public partial class About: System.Web.UI.Page {
        int sign;
        double num, num2;

        protected void Page_Load(object sender, EventArgs e) { }

        protected void Button4_Click(object sender, EventArgs e) { }

        protected void But0_Click(object sender, EventArgs e) {

            AnswerBox.Text = AnswerBox.Text + "0";
        }

        protected void But1_Click(object sender, EventArgs e) {
            AnswerBox.Text = AnswerBox.Text + "1";
        }

        protected void But2_Click(object sender, EventArgs e) {
            AnswerBox.Text = AnswerBox.Text + "2";
        }

        protected void But3_Click(object sender, EventArgs e) {
            AnswerBox.Text = AnswerBox.Text + "3";
        }

        protected void But4_Click(object sender, EventArgs e) {
            AnswerBox.Text = AnswerBox.Text + "4";
        }

        protected void But5_Click(object sender, EventArgs e) {
            AnswerBox.Text = AnswerBox.Text + "5";
        }

        protected void But6_Click(object sender, EventArgs e) {
            AnswerBox.Text = AnswerBox.Text + "6";
        }

        protected void But7_Click(object sender, EventArgs e) {
            AnswerBox.Text = AnswerBox.Text + "7";
        }

        protected void But8_Click(object sender, EventArgs e) {
            AnswerBox.Text = AnswerBox.Text + "8";
        }

        protected void But9_Click(object sender, EventArgs e) {
            AnswerBox.Text = AnswerBox.Text + "9";
        }

        protected void PlusBut_Click(object sender, EventArgs e) {
            num = double.Parse(AnswerBox.Text);
            AnswerBox.Text = "";
            sign = 1;

        }

        protected void DecBut_Click(object sender, EventArgs e) {
            AnswerBox.Text = AnswerBox.Text + ".";
        }

        protected void MinusBut_Click(object sender, EventArgs e) {
            num = double.Parse(AnswerBox.Text);
            AnswerBox.Text = "";
            sign = 2;
        }

        protected void MultBut_Click(object sender, EventArgs e) {
            num = double.Parse(AnswerBox.Text);
            AnswerBox.Text = "";
            sign = 3;
        }

        protected void DivButton_Click(object sender, EventArgs e) {
            num = double.Parse(AnswerBox.Text);
            AnswerBox.Text = "";
            sign = 4;
        }

        protected void EqualBut_Click(object sender, EventArgs e) {
            num2 = double.Parse(AnswerBox.Text);
            AnswerBox.Text = "" + num + " " + num2 + " " + sign;
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 06 ноября 2018

По существу, когда вы запускаете обратную передачу (нажав кнопку в вашем случае), создается новый экземпляр класса About и предыдущие значения ваших полей теряются.

Вы должны прочитать о событиях жизненного цикла ASP-страницы .

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

double num1
{
    get { return Convert.ToDouble(ViewState["num1"] ?? 0); }
    set { ViewState["num1"] = value; }
} 

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

0 голосов
/ 06 ноября 2018

ASP.NET на стороне сервера. Таким образом, каждый раз, когда щелчок запускается на стороне клиента, создается новый экземпляр About и создаются значения sign, num и num2 со значением по умолчанию (он же 0).

Либо измените язык программирования на стороне клиента на JavaScript, либо определите значения как статические. Статические переменные связаны с классом, а не с его экземпляром, поэтому они будут содержать значение между обратными вызовами:

public partial class About : System.Web.UI.Page
{
    static int sign;
    static double num;
    static double num2;
    /* ... */
    protected void PlusBut_Click(object sender, EventArgs e)
    {
        About.num = double.Parse(AnswerBox.Text);
        AnswerBox.Text = "";
        sign = 1;
    }
}
0 голосов
/ 06 ноября 2018

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

Вам необходимо сохранить значения от одного запроса к другому. Есть несколько способов сделать это, но это нормально, чтобы сохранить их в сеансе. Точная имплантация зависит от того, какую веб-технологию вы используете.

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