我正在一个项目中尝试将一个空标签填充为所单击的数字。但是,我在Web表单后面的代码遇到麻烦,无法正常工作。我的代码在后面:
public partial class WebForm : System.Web.UI.Page
{
ArrayList phoneNumber = new ArrayList() { };
int counter = 0;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnNum1_Click(object sender, EventArgs e)
{
counter++;
phoneNumber[counter - 1] = 1;
lblNumbers.Text = phoneNumber.ToString();
}
protected void btnNum2_Click(object sender, EventArgs e)
{
counter++;
phoneNumber[counter - 1] = 1;
lblNumbers.Text = phoneNumber.ToString();
}
我的网络表单:
<form id="form1" runat="server">
<div class="container">
<asp:Image class="img-fluid d-block mx-auto" ID="imgLogo" runat="server" ImageUrl="~/Images/logo.png"/>
<div style="text-align:center; font-size:x-large; font-weight:800">
<asp:Label ID="lblNumbers" runat="server" Text=""></asp:Label>
</div>
<table class="table table-bordered" style="margin:auto; width:250px; height:342px; background-image:url(Images/Telephone-keypad.png); background-repeat:no-repeat; background-position:center;" >
<tbody>
<tr>
<asp:ListBox ID="ListBox1" runat="server"></asp:ListBox>
<td><asp:Button ID="btnNum1" runat="server" OnClick="btnNum1_Click"/></td>
<td><asp:Button ID="btnNum2" runat="server" OnClick="btnNum2_Click"/></td>
<td><asp:Button ID="btnNum3" runat="server" OnClick="btnNum3_Click"/></td>
</tr>
<tr>
<td><asp:Button ID="btnNum4" runat="server" OnClick="btnNum4_Click"/></td>
<td><asp:Button ID="btnNum5" runat="server" OnClick="btnNum5_Click"/></td>
<td><asp:Button ID="btnNum6" runat="server" OnClick="btnNum6_Click"/></td>
</tr>
<tr>
<td><asp:Button ID="btnNum7" runat="server" OnClick="btnNum7_Click"/></td>
<td><asp:Button ID="btnNum8" runat="server" OnClick="btnNum8_Click"/></td>
<td><asp:Button ID="btnNum9" runat="server" OnClick="btnNum9_Click"/></td>
</tr>
<tr>
<td><asp:Button ID="btnStar" runat="server" OnClick="btnStar_Click"/></td>
<td><asp:Button ID="btnNum0" runat="server" OnClick="btnNum0_Click"/></td>
<td><asp:Button ID="btnPound" runat="server" OnClick="btnPound_Click"/></td>
</tr>
</tbody>
</table>
</div>
</form>
单击每个按钮时,我希望单击的数字在单击时显示在标签中。当前,当我单击一个按钮时,它给我一个错误页面,指出:
Index was out of range. Must be non-negative and less than the size of the collection.
它还包括以下内容:
Source Error:
Line 21: {
Line 22: counter++;
Line 23: phoneNumber[counter - 1] = 1;
Line 24: lblNumbers.Text = phoneNumber.ToString();
Line 25: }
有人可以帮忙吗?
答案 0 :(得分:0)
Asp.net页面是无状态的,这意味着诸如“ int counter”之类的变量在回发之间不会保持其值。因此,它将始终为零,然后减去1,结果为-1,这将导致您得到错误。尝试将值保存在会话变量中,或者为了获得更好的结果,可以改用javascript。
答案 1 :(得分:0)
您需要将单击数字的值附加到标签中的值。由于您使用的是Webforms,因此可以将其存储在ViewState中,而不必使用会话变量(除非用户可以来去去,并且您的要求是保留它)。
我会尝试这样的事情:
protected void btnNum1_Click(object sender, EventArgs e)
{
appendNumber(1);
}
.
.
.
private void appendNumber(int number)
{
counter++;
phoneNumber[counter - 1] = number;
ViewState["phoneNumber"] = phoneNumber.ToString();
}
protected void Page_Load(object sender, EventArgs e)
{
if(!String.IsNullOrEmpty(ViewState["phoneNumber"].ToString()))
{
lblNumbers.Text = ViewState["phoneNumber"].ToString()
}
}
答案 2 :(得分:0)
static int counter = 0;
使用此方法...它将保存回发之间的值