2

ASP.NET から jQuery UI (またはその他の HTML/JavaScript ウィジェット) を構成する最良の方法は何ですか?

現在、jQuery UI コントロールを ASP.NET UserControls でラップし、UI ウィジェットを構成するためのプロパティを追加しました。

構成は、インライン ASP 構文を使用して行われます<%=SomePropertyName %>。たとえば、DatePicker コントロールは次のようになります。

$("#yourDatePicker").datepicker({
     changeMonth: <%=ChangeMonthAllowed%>, 
     changeYear: <%=ChangeYearAllowed%>
});

この例でChangeMonthAllowedChangeYearAllowed、ASP.NET UserControl のブール プロパティになります。

もう 1 つのオプションは、次を使用して JS を追加することPage.ClientScript.RegisterClientScriptBlockです。datepicker 設定オブジェクトを作成し、それをページに挿入します。

しかし、私は両方の方法が嫌いです:

  • 最初の方法は、ASP.NET コードを ascx ファイル (または aspx または JS ファイル) に追加します。
  • 2 番目の方法は、JavaScript を ASP.NET 分離コードに追加します。

私の質問:コード ビハインド プロパティを使用して JS/HTML ウィジェットを構成するためのよりクリーンな方法はありますか?

4

2 に答える 2

2

次のように、JavaScriptをheadタグに直接挿入できます。

VB.NET

    Dim script As New StringBuilder
    'Build script         
    Dim scriptTags As New Literal
    scriptTags.Text = script.ToString()
    Page.Header.Controls.Add(scriptTags)

C#

    StringBuilder script = New StringBuilder();
    //Build script
    Literal scriptTags = new Literal();
    scriptTags.Text = script.ToString();
    Page.Header.Controls.Add(scriptTags);

JavaScriptをコードビハインドに組み込みたくない場合は、以下に示すように、マージフィールドを使用して新しいtxtファイルまたはjsファイルを作成できます。スクリプトを作成するときは、ファイルを読み取り、すべてのマージフィールドを必要な変数に置き換えるだけです。

    $("#yourDatePicker").datepicker({
         changeMonth: %%ChangeMonthAllowed%%, 
         changeYear: %%ChangeYearAllowed%%
    });

同じフォルダーにないマスターページを参照するページがある場合、このメソッドを使用してJavaScriptファイル参照を挿入するのが好きです。これにより、JavaScriptファイルが常に正しく参照されることが保証されます。

于 2012-10-19T10:12:00.803 に答える
0

私が今していること:

JavaScript で静的 .NET データが必要です

ビルド時に静的 JS ファイルを出力する T4 テンプレートを作成し、それを JS バンドルに含めます。

ASPX で動的な .NET データが必要です

aspx には、動的 .NET データを静的 JS ファイルに挿入する JavaScript がいくつかあります。

簡単な例:

MyProject.datePickers.Add({
    domSelector: "#yourDatePicker",
    properties: {
       changeMonth: <%=ChangeMonthAllowed%>, 
       changeYear: <%=ChangeYearAllowed%>
    }
});

このようにして、すべての「動的 .NET」構成が静的 (つまり、テスト可能で再利用可能な) JavaScript ファイルに挿入されます。

于 2015-02-11T15:31:09.370 に答える