3

問題は、ASP.Net MVC2 でコントロール/部分ビュー/編集テンプレート (ascx ファイル) を作成して、「自己完結型」にする方法です。ここでの自己完結型とは、一部の Javascript コードをコントロールに適用する必要がある場合、それはページ (aspx) ではなく、コントロール自体に含まれることを意味します。具体的な例: NerdDinner の DateTime.ascx。このファイルには、テキスト ボックスを便利な DateTime ピッカーにする JS コードが含まれています。

私の問題: 含まれているページには、jQuery.js、timepicker.js、jQueryUI の css、および datepicker の css があります。(NerdDinner の場合、これらはすべてマスター ページにあります)。したがって、DateTime 型に派手な DateTimePicker を使用する場合は常に、含まれているページでこれらの依存関係を認識し、すべての js ファイルと css ファイルを追加する必要があります。ここで見逃しているのは、ClientScript.RegisterClientScriptBlock を置き換えるソリューションだと思います。

同じ NerdDinner の例に関するその他の問題: DateTime.ascx では、コンテナ タイプとプロパティ名の両方に依存する $('#Dinner_EventDate') と表示されます。これは、DateTime 共有 EditorTemplate の一般的な解決策ではありません。

助言がありますか?

4

2 に答える 2

0

ページからこれらのファイルにリンクする必要があります。そうしないと、これらの要素が html に含まれる方法と、コントロールがページに含まれる場所をハッキングすることになります。

私たちがしていることは、これらすべての個別の js/css ファイルを、いくつかの追加コードを使用して 1 つのファイルに結合することです (1 回実行します)。そうすれば、マスター ページから 1 つのファイルにのみリンクできます。特に重いものを入れない限り、それは非常に合理的です。

id の問題については、jquery を css class で検索するように変更します。


元の回答:以下は無視してください。別のファイルにはまだ入っていないと思いました。

それを .js ファイルに移動し、ID の使用からクラスの使用に変更します。

コントロールのコード専用のファイルにある .js コードを構造化したままにしたい場合は、サイト内のさまざまな .js ファイルすべてを 1 つの .js ファイルに結合するコードを追加することができます。これにより、不必要な追加のリクエストを受けることなく、好きなように構造化できます。

于 2010-09-14T21:40:06.890 に答える
0

これが MVC に固有の質問かどうかはわかりません。完全に自己完結型のコントロールが必要な場合は、サーバー コントロール (複合コントロールやスクリプト コントロールなど) を検討してください。これらのコントロールは ASCX ページを使用せず、Web アプリケーションから独立しています。このようにして、CSS シートと JS ページをリソースに埋め込むことができます。プロジェクトをビルドすると、単一の DLL にコンパイルされます。このようにして、独自のライブラリのコントロールを作成できます。ただし、欠点は、これらのコントロールを作成するのがかなり難しいことです。興味のある方はお知らせください。例を掲載します。例として、こちらをご覧ください: http://msdn.microsoft.com/en-us/library/aa719734%28v=vs.71%29.aspx

しかし、ASCX ページを使用して JavaScript と CSS を埋め込みたい場合は、スクリプト マネージャーを使用して行うことができます (少なくとも、これは CSS ではなく Javascript で行いました)。例:

 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
      dim myScript as new StringBuilder
      myScript.Append("function helloWorld(){" & vbcrlf)
      myScript.Append("alert('Hi')" & vbcrlf)
      myScript.Append("}" & vbcrlf)

      ScriptManager.RegisterStartupScript(Me.Page, Me.Page.GetType(),"MyScript",myScript.toString, false)
  End Sub

この例では、単純な JavaScript 関数テキストを作成し、それをページに登録します。いいえ、JavaScript がたくさんある場合、これは面倒です。また、これがCSSで機能するかどうかはわかりません。これが役立つかどうか教えてください。

于 2013-03-28T18:52:56.643 に答える