ASP.NETを使用してjQueryでいくつかのものを作成しようとしています。ただし、runat="server"
のIDは、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属性はselectorで終わる を使用することを好みます。生成されたIDがコントロールのフラット化された階層である場合、「endswith」セレクターを使用して要素を見つけることができます。
<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%確かに私のために働いています...
ASP.NET 4を使用していて、ClientIDModeが「Predictable」に設定されている場合、階層に基づいてIDを予測できます。または、「静的」に設定して、asp.netが混乱しないようにします。
それに関するScottGuの記事 http://weblogs.asp.net/scottgu/archive/2010/03/30/cleaner-html-markup-with-asp-net-4-web-forms-client-ids- vs-2010-and-net-4-0-series.aspx
また、これは外部JSファイルシナリオを使用する場合に非常に役立ちます。
Darin Dimitrov が彼の答えで言ったように:
<%= txtTest.ClientID %>
は機能するはずですが、サーバーサイドスクリプトが実行されない別のjavascriptファイルにはありません。
それらのために私が見つけることができた解決策は次のとおりです。
<input runat="server" id="txtTest" value="test" class="txtTest" />
class
の代わりにID
を使用してくださいクラスを使用すると、どこでも値を取得できます。これは最良の解決策の1つです(通常は最良です)
var value = $('.txtTest').val();
ClientID
でaspx
コードを使用しますAspxではいつでもClientID
を呼び出すことができますが、ある種の構造を使用している場合、これは最善の解決策ではありません。私は何かをテストするときにこの方法を使うのが好きです。
var value = $('#<%=txtTest.ClientID%>').val();
回避策を使用して、外部jsファイルでClientID
を使用することもできます。 それはきれいではありません、本当に必要な場合にのみ使用してください。私は通常、Telerik
を使用するときにこれを行います。
Aspxの場合:
var id = <%=txtTest.ClientID%>;
Jsファイル:
var value = $('#'+id).val();
Static
を使用しますしたがって、HTMLは
<input runat="server" id="txtTest" value="test" ClientIDMode="Static" />
そしてjsはそれが名前が付けられているようにそれを呼び出すことができます
var value = $('#txtTest').val();
このソリューションの問題は、ページのids
での重複を避けるために、非常に注意する必要があることです。コントローラでStatic
モードを使用しないでください。
述べているようにMSDN:
ClientID値は、IDプロパティの値に設定されます。コントロールがネーミングコンテナの場合、コントロールは、コントロールに含まれるすべてのコントロールのネーミングコンテナの階層の最上位として使用されます。
shaansの回答 のリンクは、ClientIDModeに関する追加情報を確認するのに最適な場所です。
ASP.NET 4 Webフォームを使用したよりクリーンなHTMLマークアップ-クライアントID(VS2010および.NET4.0シリーズ)
変数名に入れてみてください:
var txtTestID = '#' + '<%=txtTest.ClientID %>';
$(txtTestID).val();
<%=
が二重引用符で囲まれるのが好きかどうかはわかりません。一重引用符を使用しない場合、私は常にさまざまな動作をしていました。
レンダリングされたIDの問題を回避するには、代わりにクラスを使用してください。これはレンダリング中に変更されません:
function contatoModal() {
//alert("Test");
alert($(".txtTest").val());
}
HTML:
< input runat="server" id="txtTest" value="test" class="txtText" />