1

ASP.NET MVC を学習しようとしていますが、会社で ViewBag を使用するコードに出くわしました。それが何であるかを調べたところ、コントローラーで宣言してビューからアクセスできる変数のコンテナーのように見えます。

Ruby on Rails や Struts などの他のフレームワークを使用したことがありますが、これを行う必要はありません。特に ruby​​ on rails では、次のようにしてビュー内で get 変数を簡単に呼び出すことができます。

 <%= variable %>

さらに調査した結果、ViewData と ViewBag の使用は推奨されていないことがわかりました。コントローラーから変数を直接取得するだけでなく、その使用法を誰かが説明できますか?

ありがとう。

4

2 に答える 2

4

ASP.NET MVC では、ビューが必要とするデータをコントローラーからビューに明示的に渡す必要があります。

これを行うための推奨される方法は、厳密に型指定されたビューを使用し、クラス インスタンスの形式でデータを渡すことです。

public ActionResult MyAction() {
    return View(new MyViewModel { Prop1 = "Value1", ... });
}

ビューで、ビューが使用するモデル クラスを指定します。

@model MyViewModel

ViewData と ViewBag は、ビューにデータを渡す代替/履歴方法です。ViewData はディクショナリであり、値を取得するには型キャストが必要です。ViewBag は動的オブジェクトです。どちらも、ビューを厳密に型指定することで得られるメリットがありません。

ViewData には、モデルのメタデータまたはモデル状態にアクセスするためのその他のプロパティがいくつかあります。例を参照ViewData.ModelMetadataしてください。

コントローラーから変数を直接取得するだけでなく、その使用法を誰かが説明できますか?

はい、デカップリング。MVC パターンは、View がコントローラーに依存しないことを示しています。ビューがコントローラーのプロパティにアクセスできる場合、それはその特定のコントローラーに結合され、MVC のMは消えます。

于 2013-05-06T14:32:45.827 に答える
2

ViewBag と ViewData はどちらも、View/Controller の分離を維持するためのものです。通常は ViewModel に収まるデータは、ViewBag またはビューで使用される ViewData に配置できます。たとえば、必ずしもビューに固有ではない、選択リスト データなどのデータ。

ViewBag と ViewData の違いは、ViewBag 内のデータがプロパティを介してアクセスされるキー/値コンテナー (辞書) としてビュー データにアクセスされることです (これは動的オブジェクトであるため、新しい値を「プロパティ」に割り当てます)。プロパティを作成します)。

アップデート:

使用<%= variable %>すると、特定のビューで変数にアクセスしています。コントローラがこの値を設定するには、コントローラをビューに結合して直接割り当てる必要があります。もちろん、これは可能ですが、望ましくない可能性があるビューへの直接結合が導入されます。

于 2013-05-06T14:30:50.680 に答える