2

ASP.NET に C# コード ビハインドを含む Web アプリがあります。メインのログイン ページには、ピン番号を入力するための 0 ~ 9 のボタンがある一種のタッチパッド タイプの UI があります。

したがって、私は ASP.NET と JavaScript の両方を初めて使用します。これらの数値ボタンが UI でクリックされた場合、サーバー側で何もする必要はありません。ポストバックはまったくありません。必要なのは、ラベルのテキストに番号を追加することだけです。ボタンが何らかのポストバックを引き起こすことなく、JavaScriptでそれを行う方法を理解しようとしています。

例をもっと簡単にするために、画面上に 1 つのラベルと 1 つのボタンを持つ UI があり、この 1 つのボタンをクリックするたびに、ラベルのテキストに 1 を追加する必要があるとしましょう。これが私の.aspxですが、これを実行しようとすると、実行時に「オブジェクトが必要です」という例外が発生します...

編集:以下の回答で行われた提案を含めるように例を変更しましたが、まだ問題があります。再現するには、この .aspx コードを新しい VS Web アプリケーション プロジェクトの default.aspx にコピーして実行し、[1] ボタンをクリックします。ラベルの値に 1 を追加する必要がありますが、"Object Expected" 例外がスローされます。

 <%@ 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クライアント イベントを にバインドしButtonます。PageLoad

    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 に答える