2

我在 ASP.NET 中有一个 Web 应用程序,后面有 C# 代码。主登录页面将有一种触摸板类型的 UI,其中有 0-9 的按钮用于输入 pin #。

所以,我是 ASP.NET 和 JavaScript 的新手。当在 UI 上单击这些数字按钮时,无需在服务器端执行任何操作 - 根本不应该有任何回发。所需要做的就是在标签的文本上附加一个数字。我试图弄清楚如何在 JavaScript 中做到这一点,而按钮不会导致任何类型的回发。

为了使示例更简单,假设我在屏幕上有一个带有单个标签和单个按钮的 UI,并且每次单击该单个按钮时,它都应该在标签的文本中附加一个 1。这是我的 .aspx,但是当我尝试运行它时,在运行时出现“预期对象”异常......

编辑:我已经修改了我的示例以包含以下答案中提出的建议,但仍然存在问题。要重现,可以将此.aspx 代码复制到一个新的VS Web 应用程序项目的default.aspx 中,然后运行它并单击1 按钮;它应该将 1 附加到标签的值,但它会引发“预期对象”异常。

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TestJavascript._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
  <form id="form1" runat="server">
    <div>
      <asp:Table ID="baseTable" runat="server" HorizontalAlign="Center">
        <asp:TableRow ID="labelRow" runat="server" HorizontalAlign="Center" Width="100" Height="30">
          <asp:TableCell ID="labelCell" runat="server" HorizontalAlign="Center" Width="100%" Height="100%" BorderStyle="Solid" BorderWidth="1px">
            <asp:Label ID="inputLbl" runat="server"/>
          </asp:TableCell>
        </asp:TableRow>
        <asp:TableRow ID="buttonRow" runat="server" HorizontalAlign="Center">
          <asp:TableCell ID="buttonCell" runat="server" HorizontalAlign="Center">
            <asp:Button ID="btn1" runat="server" Text="1" Height="70px" Width="70px" OnClientClick="btn1Click()"/>
          </asp:TableCell>
        </asp:TableRow>
      </asp:Table>
    </div>
  </form>
  <script type="txt/javascript">
    void btn1Click()
    {
        document.getElementById('<%= inputLbl.ClientID %>').value += "1";
        return false;
    }
  </script>
</body>
</html>

任何帮助深表感谢!

4

4 回答 4

18

您可以使用OnClientClickasp 按钮的属性并添加return false;它以防止回发:

<asp:Button ID="1Btn" runat="server" Text="1" Height="70px" Width="70px" 
    OnClientClick="btn1Click(); return false;" />
于 2012-10-22T17:35:01.697 回答
2

使用return false;语句,它将停止回发;如果您需要回发,return true;则从函数中。

<script type="text/javascript">
void btn1Click()
{
    this.inputLbl.Text += "1";
    return false;
}
</script>
于 2012-10-22T17:35:14.473 回答
1

首先,变量名不应该以数字开头,所以1Btn用一个有意义的名字(btnAppendOne)替换。

  1. 在您的方法中将onclick客户端事件绑定到您的 , :ButtonPageLoad

    btnAppendOne.Attributes.Add("onclick", "return btnAppendOneClick();");
    
  2. 使用正确的javascript(return false应该取消回发):

    <script type="text/javascript">
         function btnAppendOneClick()
         {
             var updatedLabel = document.getElementById('<%=inputLbl.ClientID %>');
             updatedLabel.innerHTML = updatedLabel.innerHTML + "1";
             return false;
         }
    </script>
    
于 2012-10-22T17:42:16.970 回答
1

您的 Script 标签中有错字。第一行 (1)

 <script type="**text**/javascript">
void btn1Click()
{
    document.getElementById('<%= inputLbl.ClientID %>').value += "1";
    return false;
}

于 2017-02-10T13:59:57.773 回答