jqueryのasp.net runatサーバーからIDを取得します
-
28-10-2019 - |
質問
asp.netを使用してjqueryでいくつかのものを作っています。しかし、IDから runat="server"
HTMLで使用されているIDと同じではありません。
私はこれを使用してこの状況からIDを取得していました。
$("#<%=txtTest.ClientID%>").val();
しかし、この場合、それは機能しません。私はその理由について無知です。
JavaScript
/* Modal */
function contatoModal() {
//alert("Test");
alert($("#<%=txtTest.ClientID%>").val());
}
HTML
< input runat="server" id="txtTest" value="test" />
任意のヒント?
解決
<%= txtTest.ClientID %>
サーバーサイドスクリプトが実行されない別のJavaScriptファイルでは機能する必要があります。別の可能性は、クラスセレクターを使用することです。
<input runat="server" id="txtTest" value="test" class="txtTest" />
その後:
var value = $('.txtTest').val();
他のヒント
他の人が述べたように、クラスセレクターをjQueryに渡すことができますが、それは少し乱雑です。私は使用することを好みます jQuery属性はセレクターで終わります. 。生成されたIDがコントロールの平坦化された階層であることを考えると、「end」セレクターを使用して要素を見つけることができます。
<input runat="server" id="txtText" />
レンダリングすると、生成されたIDは次のようになります(傑作のコンテンツプレイスホルダー内の場合):
<input id="ctl00_contentplaceholder_txtText" />
このコントロールを見つけるには:
$("input[id$='txtText']")
リピーター内でこれを使用する場合は注意してください。
Webform / HTMLページで....
<asp:TextBox ID="txtUserName" runat="server" Class="form-control"></asp:TextBox>
jqueryで
var UserName = $("[id*=txtUserName]").val();
alert(UserName);
100%それが私のために働くことを確信しています....
変数名に入れてみてください:
var txtTestID = '#' + '<%=txtTest.ClientID %>';
$(txtTestID).val();
どうか分かりません <%=
二重引用符の中にいるのが好きです。単一の引用を使用していないとき、私はいつも混合行動をしていました。
ASP.NET 4とClientIDModeが「予測可能」に設定されている場合、階層に基づいてIDを予測できます。または、「静的」に設定するため、ASP.NETはそれを台無しにしません。
これは、外部JSファイルシナリオを使用する場合に非常に便利です。
として ダリン・ディミトロフ 彼の答えで言った:
<%= txtTest.ClientID %>
動作するはずですが サーバーサイドスクリプトが実行されない別のJavaScriptファイルではありません.
私がそれらのために見つけることができるソリューションは次のとおりです。
<input runat="server" id="txtTest" value="test" class="txtTest" />
- 使用する
class
それ以外のID
クラスを使用すると、どこでも値を取得できます。これは最高のソリューションの1つです(通常は最高です)
var value = $('.txtTest').val();
- 使用する
ClientID
のコードaspx
いつでも電話をかけることができます ClientID
ASPXでは、ある種の構造を使用している場合、これは最良の解決策ではありません。私は何かをテストしているときにこの方法を使用するのが好きです。
var value = $('#<%=txtTest.ClientID%>').val();
使用することもできます ClientID
回避策を備えた外部JSファイル。 きれいではありません, 、本当に必要な場合にのみ使用してください。私は通常、私が使用するときにこれをします Telerik
.
ASPXで:
var id = <%=txtTest.ClientID%>;
JSファイル:
var value = $('#'+id).val();
- 使用する Control.ClientIDModeプロパティ
Static
したがって、HTMLはなります
<input runat="server" id="txtTest" value="test" ClientIDMode="Static" />
そして、JSはそれが名前であるようにそれを呼ぶことができます
var value = $('#txtTest').val();
この解決策の問題は、あなたが とても 重複を避けるように注意してください ids
あなたのページの。使用しないでください Static
コントローラーのモード。
州としてMSDNとして:
ClientID値は、IDプロパティの値に設定されます。コントロールが命名容器である場合、コントロールは、含まれるコントロールの命名コンテナの階層の上部として使用されます。
のリンク シャーンの答え clientIdModeに関する追加情報を確認するのに最適な場所です。
ASP.NET 4 Webフォームを備えたクリーナーHTMLマークアップ-ClientIDS(VS 2010および.NET 4.0シリーズ)
レンダリングされたIDの問題を回避するには、代わりにクラスを使用してください。これはレンダリング中に変わりません:
function contatoModal() {
//alert("Test");
alert($(".txtTest").val());
}
HTML:
< input runat="server" id="txtTest" value="test" class="txtText" />