尝试显示使用asp.net通过按钮输入的电话号码

时间:2019-01-29 23:14:07

标签: c# asp.net webforms

我正在一个项目中尝试将一个空标签填充为所单击的数字。但是,我在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:         }

有人可以帮忙吗?

3 个答案:

答案 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;

使用此方法...它将保存回发之间的值