2017-10-23 5 views
0

MVCに移動して以来、私は常に共通の何かをするビューを守ることができる再利用可能な "コンポーネント"を疑問に抱きました。すべてのビューとそのコンポーネント内にjQueryが含まれています。私はView Componentsについて話していますが、それらはきちんとしていますが、(住所や電話番号を表示する以外の)実用的な必要性はまだ感じていません。本当に対話的なものはありません。ASP.NETコアでJavascriptを使用して再利用可能なコンポーネントを作成する方法

Viewコンポーネントでこれを行うことができない場合、私は何をしますか? JavaScriptを使用するViewコンポーネントがありますが、レイアウトで定義したセクションを参照できないためです。私はこれが設計によるものであると述べる数十の記事を読んだ。まあ、私の意見では、これは貧弱なデザインであり、これらのコンポーネントを非インタラクティブ(または限定)にロックします。

+0

私はあなたには、いくつかの要素を共有できるようになる依存性注入コンテナの中にスコープサービス 'MyViewContext'を追加します。あなたがそれを必要とするなら、それを簡単に注入する。 –

答えて

0

私は任意のビュー

に固執することができ、再利用可能な「コンポーネント」私は何を探していることはtemplatesだと思います。モデルは表示テンプレートとエディタテンプレートを持つことができるという点で再利用可能です。

再利用可能な

public class Car 
{ 
    public string Model { get; set; } 
} 

コントローラーモデル:

public class IndexVM 
{ 
    public Car Car { get; set; } 
} 

index.cshtml

@model IndexVm 

@Html.DisplayFor(m => m.Car) 

共有/ displaytemplates/car.cshtml

これはかなり同じくらい簡単です
@model Car 

@Html.DisplayFor(m => m.Model) 

スクリプトに関しては、必要なJSだけをレンダリングするという考えは、ずいぶん前に亡くなりました。それはBootstrapがbootstrap.min.js、bootstrap.min.cssを持っている理由です。 をすべて一緒にまとめないと、クライアントは一気にキャッシュすることができます。

コンポーネントの表示MVCではちょっとハッキリです。彼らはMVCとWebページでで動作するように見えるが、実際には考え出されていない。

More Reading

+0

Viewコンポーネントに関するご意見に同意します。私はテンプレートの使用について考えたことはありません。私は現在、他のモデル用のエディタテンプレートを使用しているので、どのビューでも同じコンセプトを「コンポーネント」に適用できない理由はありません。ヒントをありがとう – Keith

1

サービスを作成します。

public class MyViewContext 
{ 
    public bool IsJqueryRequired { get; set; } 
    public object MyAwesomeSharedObject { get; set; } 
} 

次にDIコンテナに追加します(スコープは、すべての新しい要求を作成している)スコープ:あなたのビューで

services.AddScoped<MyViewContext, MyViewContext>(); 

あなたはそれをこのようにアクセスすることができます。

@inject MyViewContext MyViewContext 

他のすべては単純でconstructor injectionを使用しています。

もう一つの素晴らしいオプションは、TagHelperとTagHelperContextです。 Hereは素晴らしい記事です。私はいつも疑問に思って(今のニーズにしています)している

+0

@Christianのお返事ありがとうございます。コンストラクタインジェクションを使用するコンセプトは実際にはかなり意味があり、結果を気に入っているかどうかを確認する必要があります。 – Keith

関連する問題