繁体   English   中英

在ASP.NET Web应用程序中使用功能

[英]Using function in ASP.NET web application

不好意思,我是C#的初学者,在创建计算器Web应用程序时需要帮助和一些指导。 因此,我被赋予了使用ASP.NET Web应用程序Web表单和UI来创建计算器Web应用程序的任务,如下所示:

计算器用户界面

关键是,我犯了一个错误,而是改用Windows Forms App(WFA),可以使计算器正常工作。

但是,当我尝试使用ASP.NET Web应用程序Web表单制作计算器时,计算器将无法工作,因为以某种方式设置为运行该方法的变量没有任何值,这与在WFA中运行该变量不同。

这是我的代码:

  namespace WebApplication1
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        bool lastpressedIsOperation;

        string input = String.Empty;

        protected void num_Click(object sender, EventArgs e)
        {
            Button button = sender as Button;
            //this.display.Text = "";
            input+=button.Text;
            if (display.Text == "0" && display.Text != null)
            {
                display.Text = button.Text;
            }
            else
            {
                display.Text += button.Text;
            }

        }

        protected void op_Click(object sender, EventArgs e)
        {
            Button button = sender as Button;
            input+=button.Text;
            if (display.Text == "0" && button.Text == "-" && display.Text != null)
            {
                display.Text = button.Text;
            }
            else
            {
                display.Text += button.Text;
            }
        }

        protected void del_Click(object sender, EventArgs e)
        {

            //this.display.Text = input.ToString(0,input.Length);
        }

        protected void del_all_Click(object sender, EventArgs e)
        {
            this.display.Text = "0";
            this.input = string.Empty;
        }
        private void enter_Click(object sender, EventArgs e)
        {
            string inFix = input;
            string isValid = Validate(inFix);
            string rpn = ConvertToPostFix(isValid);
            string result = Convert.ToString(CalculateRPN(rpn));

            this.display.Text = result;
            input = result;

        }

        private static string Validate(string inFix)
        {
            StringBuilder newstring = new StringBuilder(inFix);
            Stack<int> lb_index = new Stack<int>();//stack for left bracket index
            Queue<int> rb_index = new Queue<int>();//stack for right bracket index
            char temp = '#';
            Console.WriteLine("temp: ", temp);


            for (int i = 0; i < newstring.Length; i++)
            {
                if (newstring[i] == '(')
                    lb_index.Push(i);
                else if (newstring[i] == ')')
                    rb_index.Enqueue(i);
                Console.WriteLine("temp: {0}", temp);
                if (newstring[i] == '-')//change unary - to ~
                {
                    if (temp.IsOperator())
                    {
                        newstring[i] = '~';
                    }
                }
                temp = newstring[i];
            }
            if (lb_index.Count == rb_index.Count)
            {
                bool bracket_valid = true;
                for (int i = 0; i < lb_index.Count; i++)
                {
                    if (lb_index.Pop() > rb_index.Dequeue())
                    {
                        bracket_valid = false;
                        break;
                    }
                }
                if (bracket_valid != true)
                {
                    newstring.Clear();
                    newstring.Append("Error, Bracket wrong");
                }
            }
            else if (lb_index.Count < rb_index.Count || lb_index.Count > rb_index.Count)
            {
                newstring.Clear();
                newstring.Append("Error, Bracket wrong");
            }
            Console.WriteLine("newstring = {0}", newstring);
            return newstring.ToString();

        }

我的想法是,我想在用户使用数字和操作按钮输入值并按下Enter键之后,从文本框中获取字符串。

然后首先使用Validate(inFix)验证字符串,然后将其格式化为后缀ConvertToPostFix(isValid) ,然后使用CalculateRPN(rpn)计算得出。

但我不知道为什么isValid变量从不从Validate(inFix)获取值,这会导致其他方法无法正常工作。 在ASP Web应用程序表单中如何使用该功能有什么区别? 如果是这样,我该如何使用方法/功能?

还有没有更好的方法来实现这一点,以便我可以完成任务?

我相信您的问题是您正在设置:

string inFix = input;

在你的

enter_Click

方法。

然而,

 input 

变量初始化为:

string input = String.Empty;

因此,每次加载表单时,即在初始加载或回发时,输入变量都会重新初始化为空字符串。

我不会在这里重新创建帖子,但是要解决此问题,您需要执行以下操作:

Session["INPUT"] = input;

只要修改了输入,就执行以下操作:input =(string)Session [“ INPUT”]; 在页面加载时初始化输入变量。 如果是初始页面加载,则输入变量将为null(即,会话变量Session [“ INPUT”]不存在)。

基本上,我的意思是,尽管asp.net会话在窗体上存储控件的状态,但它不会保存添加到页面上的自己的类变量的状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM