3

次のような ASP.NET ページに JavaScript があります。

var list = $get('<%=Topics.ClientID %>');

現在、この構文が使用されている多くの関数を記述しています。JavaScript を一元化して、これを外部 JavaScript ファイルに移動したいと考えています。ただし、「トピック」が見つからないため、これは機能しません。

これを機能させるための最良の戦略は何ですか? コントロール/コントロール情報をパラメーターとして関数に渡す必要があると思いますが、構文が機能しないようです。助言がありますか?

4

3 に答える 3

1

これは、ASP.NET JS 開発の一般的な問題です。私に関しては、毎回同じアプローチを使用していますが、問題ないようです。

私は Javascript で OOP に慣れているので、ほとんどの JS 外部ファイルは次のようになります。

function CouponManager()
{
}

そして、.aspxコードで私は:

<script language="javascript">
    var couponManager = new CouponManager();
</script>

いくつかのパラメーターを渡す必要がある場合は、クラスの宣言を次のように変更します。

function CouponManager(params)
{
    // .. stuff here

    this.initialize = function(initParams)
    {
       // .. accessing initParams variable for server control IDs
    };

    this.initialize(params);
}

そして、.aspx コードから次のことを行います。

<script language="javascript">
    var couponManager = new CouponManager
    ({
        txtCouponNameId = '<%= txtCouponName.ClientID %>',
        txtCouponDescriptionId = '<%= txtCouponDescription.ClientID %>'
    });
</script>

このアプローチにより、JS を .aspx ページから分離し、すべてのサーバー コントロールの依存関係を 1 つのタグに含めることができます。

于 2009-06-10T10:29:37.210 に答える
1

クライアント側要素を返す usercontol 内から JavaScript メソッドを作成する必要があります。次に、他のページ/コントロールで、そのメソッドにアクセスするだけです

ユーザー制御で

 <script language="javascript">
     function GetTopics() {
          return = $get('<%=Topics.ClientID %>');
     } 
 </script>

他のページ/コントロール

 <script language="javascript">
     var list = GetTopics();
 </script>

編集 - あなたが直面している問題は、存在しない Topics.ClientID が必要なことです。したがって、そのギャップを埋める唯一の現実的な方法は、それを共通の場所に置くことです。本当にそうしたくない場合は、他の基準で要素を選択してみてください。jQuery を使用している場合は、トピックのクラスで要素をマークし、$(".Topics") でそれを見つけることができます。

于 2009-05-26T14:41:27.120 に答える
0

ページごとに「トピック」と呼ばれるサーバー コントロールが 1 つしかないことがわかっていて、トピックのコントロールから継承できる命名規則を使用している場合 (おそらくそれは HiddenField ですか?指定しません)、その ClientId ゲッターをオーバーライドして返すことができます。そのサーバーIDは次のようになります:

http://andreascode.wordpress.com/2009/04/27/tiny-drips-of-aspnet-juice/

次に、JavaScriptファイルで、IDが「トピック」に設定されたページに非表示のフィールドがあり、それを直接使用できることを知ることができます。

ドメイン/状況に応じて、これにより多くの時間が節約されるか、大幅に台無しになる可能性があります.

于 2009-06-04T13:05:58.733 に答える