2012-02-06 9 views
2

ALL自分のリソースをベースレイアウト/テンプレートビューに表示するか、ajaxでロードする部分表示に直接ロードする方が良いですか?ほとんどの場合、ajaxで作られたWebサイトにリソースを正しく読み込む方法は?

Exemple:

_layout:

[...] 

    <head> 
     <script src="file.js"></script> 
     <link href="file.css"></link > 
    </head> 

[...] 

OR

_layout:(AJAXの後半ロード)

[...] 

    <head> 
    </head> 

[...] 

partialView:

<div> 
    <script src="file.js"></script> 
    <link href="file.css"></link > 
</div> 

答えて

1

あなたが通常やっていることは、いくつかのスクリプトリソースをビューバックのリストにプッシュして、テンプレートを取得してそのリストを通過させ、スクリプトインクルードを生成することです。部分的に

:これは、あなたはかなり良いしている部分と、スクリプトを関連付けることができ、良いです通常の状況ではレイアウトで

@{ 
    ViewBag.ScriptIncludes = ViewBag.ScriptIncludes ?? new List<string>(); 
    ViewBag.ScriptIncludes.add("script1.js"); 
} 

(_Layout.cshtml)

@if (ViewBag.ScriptIncludes != null) 
{ 
    foreach (string url in ViewBag.ScriptIncludes) 
    { 
     <script src="@url" type="text/javascript"></script> 
    } 
} 

あなたがページの読み込み時にページに存在する部分だけをリフレッシュするのであれば、

スクリプトはページにあらかじめロードする必要があります。 ajaxを介してスクリプトリソースを取得し、それをページに注入することで、スクリプトをリロードするべきではありません。理想的には、ajaxにhtmlをもらうことはできませんが、これを受け入れる人もいます。あなたは、より多くのスクリプトではなく、ページにhtmlを注入したいだけです。部分ビュー内のアイテムにイベントハンドラがある場合は、個々の要素ではなくコンテナにイベントハンドラをアタッチすることを検討してください。

しかし、任意のビューを再読み込みしている場合は、スクリプトを頭に入れておく方が良いと思います。これにより、後で競合するスクリプトが見つからないことが保証されます。サイトは、本質的に、最初に読み込むための小さなオーバーヘッドをユーザーに負担させるアプリケーションですが、更新する必要はありません。

+0

問題はすべての私のウェブサイトがAJAXにあることです。ほぼすべてのビューが読み込まれます。 –

+0

とにかくすべてをリロードしている場合は、何のポイントですか?この前にページにあなたのリソースをあらかじめロードしておけば、意味があるかもしれません。あなたはJavaScriptの状態に本当に注意する必要があります。おそらく、すべてのスクリプトが頭の中に含まれているように(より良いが単一のjsファイル)、あなたのサイトのどこかに矛盾した状態がないことを知るように、あなたのサイトをコードする方が良いでしょう。また、戻るボタンを壊さないようにしてください;) –

+0

私は、動的スクリプトの読み込みは悪くないと言及すべきですが、一部のスクリプトで部分的なビューを取得するよりも構造化されたメカニズムが必要です。各ページのjsonデータを取得してクライアント上でレンダリングし、JavaScriptモジュールを非同期にロードする方が、 –

1

私はあなたの文脈に依存していると思います。レイアウトに配置すると、すべてのページ(ビュー)に必要なリソースをより良くしたいとします。また、ビューに非常に固有のリソースがある場合は、それらをビューにロードすることもできます。
URLヘルパーを使用してリソースのURLを取得していることを確認してください。そうしないと、展開後に問題が発生します。

+0

スクリプト "y"を持ったビュー "x"を読み込んで複数回ロードすると(古いものを上書きする)、それは悪いですか? –

+0

ええ、それは悪いです。複数のビューに関連する場合は、テンプレートからロードする必要があります。 –

関連する問題