2

runat="server"を使用せずに、ASP.NET が で作成された要素に値を追加する方法に対処する最善の方法を見つけようとしています<%= id.ClientID %>。今日の初めに次の解決策を思いつきましたが、もっと洗練された解決策があると確信しています。

    $(document).ready(function() {
        var dotNetPrefix = $("[id$='prepended_ID_value']").attr('id');
        if (dotNetPrefix !== undefined) {
            dotNetPrefix = dotNetPrefix.replace('prepended_ID_value', '');
            dotNetPrefixID = '#' + dotNetPrefix;
            console.log('dotNetPrefix = ' + dotNetPrefix);
            testDotNet('prepended_ID_value');
        } else {
            console.log('Hidden Field is Missing! => <asp:HiddenField runat="server" ID="prepended_ID_value" Value="dotNet_ID_Prefix" />');
        }

    });

    function testDotNet(getID) {
        var test_dotNetPrefixID = $(dotNetPrefixID + getID).val();
        console.log('$(\'' + dotNetPrefixID + getID + '\').val() = ' + test_dotNetPrefixID);
    }

この方法の問題点の 1 つは、すべてのページに次の隠しフィールドを配置する必要があること

<asp:HiddenField runat="server" ID="prepended_ID_value" Value="dotNet_ID_Prefix" />

です。

最終的な目標は<%= id.ClientID %>、JS を ASPX ページに埋め込むのではなく、インクルードとして呼び出すことができるように (またはサーバー側のコードを必要とするものを) 使用する必要がないようにすることです。ああ、私の 2 番目の究極の目標は、プロジェクトをできるだけシンプルにし、プロジェクトごとに多くのセットアップ時間を必要としないことです。

http://jsfiddle.net/Realto619/8ZZYt/2/の例で JSFiddle を作成しました

4

4 に答える 4

2

ClientIDMode=Staticを使用しないのはなぜですか? Web.config で設定して、サイト全体でクライアント ID が記述どおりになるようにします。

于 2012-09-27T04:23:03.543 に答える
2

.Net Framework 4.0 以降を使用している場合は、Control のClientIDModeプロパティを使用します。

Static をClientIDModeEnumerationとして使用できます。

ClientID 値は、ID プロパティの値に設定されます。コントロールが名前付けコンテナーである場合、そのコントロールは、それに含まれるすべてのコントロールの名前付けコンテナーの階層の最上位として使用されます。

于 2012-09-27T04:24:17.723 に答える
1

正解は以下の通り

var txt1 = $('#<%= txt1.ClientID %>');
$(txt1).click(function () {
    alert('hi');
});

彼女は、レンダリングされたクライアントIDに基づいてコントロールへの参照であるJavaScriptで新しい変数を作成します

于 2015-02-17T11:00:58.590 に答える
1

セレクターで終了する jQuery を使用できます。

$('input[id$="myServerId"]')

ただし、そのようなセレクターは、id を使用して直接選択するよりもはるかに遅いことを覚えておいて<%= id.ClientID %>ください。

http://jsperf.com/id-vs-ends-with

于 2012-09-27T04:24:23.193 に答える