10

私は.Net開発が初めてで、現在NerdDinnerチュートリアルに従っています。あなたの誰かが私に言うことができるかどうか疑問に思っています

ViewData と ViewModel の違いは何ですか

(私が知っているのは、コントローラーからビューに何らかの形式のデータを渡すために使用されることだけです)、おそらく、ViewModelの代わりにViewDataを使用する必要がある状況について教えてください。

前もって感謝します!

サリー

4

2 に答える 2

12

ビューデータとは?

  • ビューで使用できるようになります。

ViewData サンプル

コントローラ アクション メソッドの好み:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var featuredProduct = new Product
        {
            Name = "Smart Phone",
            QtyOnHand = 12
        };

        ViewData["FeaturedProduct"] = featuredProduct;
        return View();
    }
}

View で ViewData を使用するには?

@{    
    var viewDataProduct = ViewData["FeaturedProduct"] as Product;
 }
<div>
    Today's Featured Product is!
    <h3>@viewDataProduct.Name</h3>
</div>

ビューモデルとは?

  • 1 つ以上のデータ モデルまたはソースから複数のエンティティを 1 つのオブジェクトに整形できます
  • ビューによる消費とレンダリング用に最適化

そのような:

モデル画像を見る

MVC 3 で ViewModel を使用するには?

ドメイン モデル

public class Product
    {
        public Product() { Id = Guid.NewGuid(); Created = DateTime.Now; }
        public Guid Id { get; set; }
        public string ProductName { get; set; }
    }

ビューモデル

public class ProductViewModel
    {
        public Guid VmId { get; set; }

        [Required(ErrorMessage = "required")]
        public string ProductName { get; set; }

    }

コントローラ アクション メソッド

[HttpGet]
public ActionResult AddProduct()
{
    //for initialize viewmodel
    var productViewModel = new ProductViewModel();

    //assign values for viewmodel
    productViewModel.ProductName = "Smart Phone";

    //send viewmodel into UI (View)
    return View("AddProduct", productViewModel);
}

表示 - AddProduct.cshtml

@model YourProject.ViewModels.ProductViewModel //set your viewmodel here

結論

  • ViewModel を使用すると、厳密に型指定されたデータを View に渡すことができます
  • ただし、ViewData は Loosely Typed.So で View にデータをキャストする必要があります
  • ViewModel は、複数のドメイン モデルのマージなどの複雑なシナリオに使用できます
  • ただし、ViewData は、ドロップダウン リストにデータを取り込むなどの単純なシナリオにのみ使用できます。
  • ViewModel は、Ui に必要な属性ベースの検証シナリオに使用できます
  • しかし、そのような種類の検証に ViewData を使用することはできません
  • ベスト プラクティスとして、常に Views.ViewModel で厳密に型指定されたデータを使用するようにしてください。
于 2012-11-03T10:25:12.993 に答える
8

ビューデータ:

つまり、SelectList へのデータソースなどのサポート データとして ViewData を使用します。

ビューモデル:

ASP.NET MVC ViewModel パターン

Controller クラスが HTML 応答をクライアントにレンダリングすることを決定した場合、応答のレンダリングに必要なすべてのデータをビュー テンプレートに明示的に渡す必要があります。ビュー テンプレートは、データの取得やアプリケーション ロジックを実行しないでください。代わりに、コントローラーによって渡されたモデル/データから駆動されるレンダリング コードのみを持つように制限する必要があります。

[...]

["ViewModel"] パターンを使用する場合、特定のビュー シナリオ用に最適化され、ビュー テンプレートに必要な動的な値/コンテンツのプロパティを公開する、厳密に型指定されたクラスを作成します。コントローラー クラスは、これらのビューに最適化されたクラスを設定し、使用するビュー テンプレートに渡すことができます。これにより、ビュー テンプレート内でタイプ セーフ、コンパイル時のチェック、およびエディターの Intellisense が有効になります。

于 2011-03-03T06:13:18.667 に答える