web-dev-qa-db-ja.com

ASP.NetでClientIDを取得していません

次のようなJavaScript関数を呼び出しているASP.Netページがあります。

 Enter server name: <asp:TextBox ID="txt_name" runat="server"></asp:TextBox>
 <asp:Button ID="btn_view" runat="server" OnClick="View_btn_click" OnClientClick="return  AlertOnGo('View Configuration',document.getElementById('<%= txt_name.ClientID %>').value)" Text ="GO!" />

しかし、[GO]ボタンをクリックすると、次のエラーが発生します。

JavaScriptランタイムエラー:未定義またはnull参照のプロパティ '値'を取得できません

ボタンのレンダリングされたコードを表示する場合:

<input type="submit" name="btn_view" value="GO!" onclick="return AlertOnGo('View Configuration',document.getElementById('<%= txt_name.ClientID %>').value);" id="btn_view" />

適切なClientIDを入れていません。テストボックスのCLientIDModeをstaticに設定しようとしましたが、役に立ちませんでした。

この質問はこれに似ています 未回答の質問

4
Abhay Kumar

この問題にはいくつかの解決策があります。

ASP.NETコントロールのOnClientClick属性内のtxt_name.ClientIDを評価しようとすると、コントロール内でのみ問題が発生するため、より簡単な方法の1つは名前をJavaScript変数に移動することです。

<script>
var txtName = '<%= txt_name.ClientID %>';
</script>

Enter server name: <asp:TextBox ID="txt_name" runat="server"></asp:TextBox>
 <asp:Button ID="btn_view" runat="server" OnClick="View_btn_click" 
OnClientClick="return  AlertOnGo('View Configuration', 
document.getElementById(txtName).value)" Text ="GO!" />
9

asp:textboxタグ内でプロパティ_ClientIDMode="Static"_を使用できます

このような

_<asp:TextBox ClientIDMode="Static" ID="txt_name" runat="server"></asp:TextBox>
<asp:Button ID="btn_view" runat="server" OnClick="View_btn_click" 
 OnClientClick="return  AlertOnGo('View Configuration', 
 document.getElementById(txtName).value)" Text ="GO!" />
_

このように、テキストボックスのクライアントIDは「id」と同じになり、document.getElementById('txt_name').valueを使用できます。

そしてそれは私のために働く

3
Katouny

別の解決策は、ブラウザに移動して昆虫要素がテキストボックスの動的IDを読み取り、JavaScriptで次のように設定することです。

var ddlFunction = document.getElementById('ctl00_SPWebPartManager1_g_ecede3f6_2b87_405a_af1b_70401bb8d4c7_ddlFunction'); 

HTML:

<asp:DropDownList ID="ddlFunction" runat="server" CssClass="dropDownClass">
    <asp:ListItem Selected="True">Select One</asp:ListItem>
    <asp:ListItem>Sample 1</asp:ListItem>
    <asp:ListItem>Sample 2</asp:ListItem>
</asp:DropDownList>
0
prashant

Cssクラスを作成し、クライアントIDの代わりにそれを使用できます(jQuery $( '。txt_name')。text()を使用)。

サーバー名を入力してください:

 <asp:TextBox ID="txt_name" CssClass="txt_name" runat="server"></asp:TextBox>
0
boateng

私はString.Concatを使用することを好みます。アポストロフィの代わりに\ u0027を使用できます。

OnClientClick='<%#String.Concat("document.getElementById(\u0027", AddToCartBtn.ClientID.ToString(), "\u0027).value = \u0027Adding...\u0027;")%>'
0
Yigit

-編集された回答--aspx

 <asp:Button ID = "btn_view" runat = "server" OnClick = "View_btn_click" OnClientClick = "javascript:return AlertOnGo( 'View Configuration');"テキスト= "GO!" />

脚本

 function AlertOnGo(mode)
 {
 var btnId = '<%= txt_name.ClientID%>'; 
 var value = document.getElementById(btnId)。 value; 
 
 // your code 
 
 return false; 
} 
0

Asp.net Webコントロールのプロパティで<%=%>を使用しています-コントロール全体がhtmlに置き換えられるため、機能するとは思われません。

JavaScriptをスクリプトブロックに移動し、イベントハンドラーをすべてインラインにするのではなく、コードに添付します。

Enter server name: <asp:TextBox ID="txt_name" runat="server"></asp:TextBox>
 <asp:Button ID="btn_view" runat="server" OnClick="View_btn_click" Text ="GO!" />
<script>
document.getElementById('<%= btn_view.ClientID %>').attachEvent('click', function() {
     return AlertOnGo('View Configuration',
                        document.getElementById('<%= txt_name.ClientID %>').value);
});
</script>
0
Tom Elmore