为什么我的页面为我的textBox传递一个空值

时间:2014-02-24 14:37:01

标签: c# asp.net

我昨晚问了这个问题,但写得不是很好,所以我要再问一遍。我正在使用ASP.NET和c#创建一个简单的计算器作为我的代码。我目前正在尝试测试并确保我的代码背后是用户输入的文本框中输入的值。我输入一个if语句,如果它传递给它的字符串为空,则为文本框分配值mehhh。我的文本框显示mehhh所以我知道它是一个空字符串,但我不知道为什么?这是一个指向该网站的链接... http://scort323.csweb.kutztown.edu/Calc.aspx以下是我的网页部分代码的代码:

  public partial class Assign2_Calc : System.Web.UI.Page
  {
     protected void ButtonEqual_Click(object sender, EventArgs e)
     {
       string inputStr = inputBox.Text;
       if (inputStr == string.Empty)
       {
         inputBox.Text = "mehhhhhh";
       }
       else
       {
      inputBox.Text = inputStr; //result.ToString();
    }
  }

 }  

下面是我的.aspx页面:

      <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Calc.aspx.cs"    
      Inherits="Assign2_Calc" Debug="true" %>

      <!DOCTYPE html>






     <html xmlns="http://www.w3.org/1999/xhtml">
     <head id="Head1" runat="server">
     <title></title>
     <link href="CalculatorStyle.css" rel="stylesheet" type="text/css" />

     <script>
     var maxInputLength = 20;

     function checkButtonClick(clickedValue) {
      var buttonValue = clickedValue;
      var inputStr = document.getElementById('inputBox').value;

      if (buttonValue == '<--') {
          if (inputStr.length >= 1) {
              document.getElementById('inputBox').value = inputStr.substring(0,      inputStr.length - 1);

          }
      }

      else if (buttonValue == 'C') {
          document.getElementById('inputBox').value = "";
      }
      else {
          if (inputStr.length < maxInputLength) {
              document.getElementById('inputBox').value = inputStr + buttonValue;
          }
          else {
              //document.getElementById('msg').innerHTML = "Maxmum length is " +  maxInputLength;
          }
      }
      return false;
  }

  </script>
  </head>

<body>
<form id="form1" runat="server">
<div>
    <div id="main" class="main">
        <div id="content" class="content">
            <h3 id="h3">Simple Calculator</h3>
                <div id="calculatorDiv">
                    <table cellpadding="0" cellspacing="0">
                    <tr>
                        <td colspan="4">
                           <asp:TextBox runat="server" CssClass="inputBox" ReadOnly="true" ViewStateMode="Enabled" ID="inputBox"></asp:TextBox>
                        </td>
                    </tr>
                    <tr>
                        <td colspan="4">
                            <br />
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <asp:Button ID="ButtonNum7" runat="server" Text="7" CssClass="CalcButtons" OnClientClick="return checkButtonClick(7)" />
                        </td>
                        <td>
                            <asp:Button ID="ButtonNum8" runat="server" Text="8" CssClass="CalcButtons" OnClientClick="return checkButtonClick(8)" />
                        </td>
                        <td>
                            <asp:Button ID="ButtonNum9" runat="server" Text="9" CssClass="CalcButtons" OnClientClick="return checkButtonClick(9)" />
                        </td>
                        <td>
                            <asp:Button ID="ButtonDivide" runat="server" Text="/" CssClass="CalcButtons" OnClientClick="return checkButtonClick('/')" />
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <asp:Button ID="ButtonNum4" runat="server" Text="4" CssClass="CalcButtons" OnClientClick="return checkButtonClick(4)" />
                        </td>
                        <td>
                            <asp:Button ID="ButtonNum5" runat="server" Text="5" CssClass="CalcButtons" OnClientClick="return checkButtonClick(5)" />
                        </td>
                        <td>
                            <asp:Button ID="ButtonNum6" runat="server" Text="6" CssClass="CalcButtons" OnClientClick="return checkButtonClick(6)" />
                        </td>
                        <td>
                            <asp:Button ID="ButtonMultiply" runat="server" Text="*" CssClass="CalcButtons" OnClientClick="return checkButtonClick('*')" />
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <asp:Button ID="Button1" runat="server" Text="1" CssClass="CalcButtons" OnClientClick="return checkButtonClick(1)" />
                        </td>
                        <td>
                            <asp:Button ID="Button2" runat="server" Text="2" CssClass="CalcButtons" OnClientClick="return checkButtonClick(2)" />
                        </td>
                        <td>
                            <asp:Button ID="Button3" runat="server" Text="3" CssClass="CalcButtons" OnClientClick="return checkButtonClick(3)" />
                        </td>
                        <td>
                            <asp:Button ID="ButtonSubtract" runat="server" Text="-" CssClass="CalcButtons" OnClientClick="return checkButtonClick('-')" />
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <asp:Button ID="ButtonDackspace" runat="server" Text="<--" CssClass="CalcButtons" OnClientClick="return checkButtonClick('<--')" />
                        </td>
                        <td>
                            <asp:Button ID="ButtonNum0" runat="server" Text="0" CssClass="CalcButtons" OnClientClick="return checkButtonClick(0)" />
                        </td>
                        <td>
                            <asp:Button ID="ButtonClear" runat="server" Text="C" CssClass="CalcButtons" OnClientClick="return checkButtonClick('C')" />
                        </td>
                        <td>
                            <asp:Button ID="ButtonAdd" runat="server" Text="+" CssClass="CalcButtons" OnClientClick="return checkButtonClick('+')" />
                        </td>
                    </tr>
                    <tr>
                        <td colspan="4">
                            <asp:Button ID="ButtonEqual" runat="server" Text="=" CssClass="CalcButtonEqual" OnClick="ButtonEqual_Click" />
                        </td>
                    </tr>
                </table>
                </div>
        </div>
    </div>
</div>
</form>
</body>
</html>

2 个答案:

答案 0 :(得分:5)

查看您网页的来源,我发现您的文本框已disabled。如果控件为disabled,则无法对其进行编辑,并在提交表单时排除其内容。因此,不是禁用(完全删除disable属性),而是将文本框设置为只读(readonly = 'true')。

答案 1 :(得分:0)

MSDN doc on ReadOnly

  

发生回发时,将ReadOnly属性设置为true的TextBox控件的Text值发送到服务器,但服务器不对只读文本框进行处理。这可以防止恶意用户更改只读的Text值。除非由服务器端代码修改,否则Text属性的值将保留在回发之间的视图状态中。

您正在“操纵”客户端脚本中的值(不在服务器代码中 - 假设上面是所有代码)。 TextBox的原始值保留(空)。

如果您通过移除ReadOnly属性进行测试(或将其设置为False),您的代码将会正常工作,您将看到设置的效果......

H个....


更新

  

..我需要怎么做才能让用户无法使用键盘输入任何内容?这样他们必须使用按钮

除非您有/有理由对该输入字段使用服务器端控件,否则带有readonly的标准HTML输入字段应该有效。

然后,您将从请求中的标准POST获取它的值(在一天结束时,WebForms仍然是HTTP POST),而不是ASP.Net控件。

琐碎的例子:

而不是服务器控制:

<asp:TextBox runat="server" CssClass="inputBox" ReadOnly="true" ViewStateMode="Enabled" ID="inputBox"></asp:TextBox>

使用普通的html输入字段:

<input id="inputBox" name="inputBox" readonly type="text" />

可以在POST请求中获取字段(html_readonly)的值:

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        string _html = Request["inputBox"]; //here it is

        //do whatever...

    }
}

... H个