所以,我开始使用ASP.NET,同时学习一点C#,足以通过制作网页来实现。我刚刚开始制作一个基本的视觉计算器项目,你点击它的花式按钮。这是我的C#代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class ExtraCredit_GraphicCalculator : System.Web.UI.Page
{
string number1 = "";
string number2 = "";
bool EnteringNumber1 = true;
bool EnteringNumber2 = false;
protected void Page_Load(object sender, EventArgs e)
{
while (EnteringNumber1)
{
Enter9.Click += (s, args) =>
{
number1 = number1 + "9";
};
Enter8.Click += (s, args) =>
{
number1 = number1 + "8";
};
Enter7.Click += (s, args) =>
{
number1 = number1 + "7";
};
Enter6.Click += (s, args) =>
{
number1 = number1 + "6";
};
Enter5.Click += (s, args) =>
{
number1 = number1 + "5";
};
Enter4.Click += (s, args) =>
{
number1 = number1 + "4";
};
Enter3.Click += (s, args) =>
{
number1 = number1 + "3";
};
Enter2.Click += (s, args) =>
{
number1 = number1 + "2";
};
Enter1.Click += (s, args) =>
{
number1 = number1 + "1";
};
Enter0.Click += (s, args) =>
{
number1 = number1 + "0";
};
Result.Text = number1;
}
}
}
只需注意一些事项,这些事件#.Something每个都与一个数字按钮相关联,所以使用Enter7.Click,点击标有7的按钮,它会做一些事情。最后,Result.Text与显示结果的Label相关联。现在,我只是希望能够看到每个按钮点击的结果,但我计划为第二个数字和数学函数添加函数,如指数和平方根。
我该怎样做才能解决此错误?
答案 0 :(得分:3)
首先EnteringNumber1
始终为真,因此您的Page_Load
方法永不退出。它只会继续添加事件处理程序,这可能会导致内存错误。知道Page_Load
是在页面的初始化部分期间触发的事件。您通常会使用此方法在控件中设置属性并建立数据库连接(有关详细信息,请参阅Page Life Cycle Overview)。
记住HTML是静态的,所有asp.net正在做的是在服务器上创建这些静态html页面。您将要删除无限循环并让事件注册一次。
您还需要在点击事件中处理某种值的显示。
在这种情况下,我真的看不到你的Page_Load
处理程序中发生了太多事情。如果需要,可以为每个按钮创建单独的事件处理程序(稍后可以简化)。默认情况下,当用户单击页面上的按钮时,会发生对服务器的PostBack,服务器会进行一些计算,并返回页面的新版本。最后,你会看到类似下面的内容:
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack()) // we only want this stuff to happen on initial load
{
hiddenField.value = 0;
}
}
protected void Enter9_OnClick(object sender, EventArgs e)
{
// a postback to the server just happened
hiddenField.value = (double)hiddenField.value + 9;
}
....
....
请注意,此代码未经过测试,可能不是100%正确,但它可以帮助您了解asp.net的工作原理。
现在,当您对页面生命周期感到满意时,真正想要做的事情是a)在javascript中处理计算客户端或b)编组从客户端代码到服务器的调用(计算将发生的地方)并使用简单的ajax返回。查看jQuery以帮助客户端。
答案 1 :(得分:3)
我看到的一个大错误是你从未将EnteringNumber1设置为false,所以在页面加载时你有一个无限循环,并且在那个无限循环中你重复注册你的按钮的事件处理程序,这会不断分配内存。
转储循环。不应该有任何需要。确保您的结果也转到asp中的输入字段,这样当按下另一个按钮时,您可以将数字“添加”到您已经建立的数字。