4

内部にascxコントロールをロードするasp.netメインページがあります。

メインページには、次のように宣言されたテキストエリア要素があります

<asp:TextBox ID="description" runat="server" Rows="8" Columns="35" TextMode="MultiLine" class="smth" title="A Title"></asp:TextBox>

次のようにレンダリングされます

<textarea name="description" rows="8" cols="35" id="description" class="smth" title="A Title"></textarea>

ascx コントロールで、同様のテキスト ボックスを次のように宣言しました。

<textarea id="descriptionMap" rows="5" cols="25" class="smth" title="A Title"></textarea>

これは同じものをレンダリングします。

メインページで、最初のテキストボックス(メインページに含まれる)の内容にアクセスできます

$('#' + <%=description.ClientID %>).val()

しかし、ascxコントロールに含まれるテキストボックスの内容にアクセスできません

$('#descriptionMap').val()

ただし、ascxファイルでテキストボックスを次のように宣言すると

<textarea id="descriptionMap">some static content</textbox>

これにアクセスすることはできますが、自分でテキスト ボックスに何かを書き込んでも何も起こりません。これは私を夢中にさせています。助言がありますか?IE 8 を使用していますが、これが問題でしょうか?

編集。簡単な例。これは、ascx コントロールのレンダリング方法です。

<textarea id="descriptionMap" rows="5" cols="25" class="smth" title="A Title"></textarea>
<input type="submit" id="sendMap" value="Send" onclick="sendTest();" />
<script type="text/javascript">
function sendTest() {
    alert(document.getElementById('descriptionMap').value);
}</script>

警告ダイアログは空で表示されます。この問題は、何らかの方法で ascx コントロールを使用することに関連している必要があります。

4

2 に答える 2

1

サーバー コントロールを使用しているか、ascx ページ内<asp:TextBox runat="server"...で html 要素を直接作成しているかは、少し不明です。<textarea id="descriptionMap"...

最初のオプション (ascx 内にサーバー側コントロールを作成する) を使用している場合、要素の最終的な ID はユーザー コントロール自体の ID に基づきます。

たとえば、メイン ページにユーザー コントロールを次のように追加したとします。

<uc:MyTag runat="server" Id="MyControl01" />

次に、ユーザー コントロール内の textarea の最終的な ID は、MyControl01_descriptionMapを使用してアクセスする必要があります$('#MyControl01_descriptionMap')(.NET Framework 4 以降でデフォルトの ClientIDMode を使用している場合)。

ただし、ascx ファイル内に html 要素を直接作成する場合は、ID が unquie であり、同じ ID を使用してコントロールにアクセスできることを確認する必要があります。

于 2013-03-07T19:46:18.723 に答える
0

使用する

$('#' + '<%= description.ClientID %>').val()

また

$('#<%= description.ClientID %>').val()
于 2013-03-07T17:02:47.560 に答える