私は.Net開発が初めてで、現在NerdDinnerチュートリアルに従っています。あなたの誰かが私に言うことができるかどうか疑問に思っています
ViewData と ViewModel の違いは何ですか
(私が知っているのは、コントローラーからビューに何らかの形式のデータを渡すために使用されることだけです)、おそらく、ViewModelの代わりにViewDataを使用する必要がある状況について教えてください。
前もって感謝します!
サリー
私は.Net開発が初めてで、現在NerdDinnerチュートリアルに従っています。あなたの誰かが私に言うことができるかどうか疑問に思っています
ViewData と ViewModel の違いは何ですか
(私が知っているのは、コントローラーからビューに何らかの形式のデータを渡すために使用されることだけです)、おそらく、ViewModelの代わりにViewDataを使用する必要がある状況について教えてください。
前もって感謝します!
サリー
ビューデータとは?
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>
ビューモデルとは?
そのような:
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
結論
ビューデータ:
つまり、SelectList へのデータソースなどのサポート データとして ViewData を使用します。
ビューモデル:
Controller クラスが HTML 応答をクライアントにレンダリングすることを決定した場合、応答のレンダリングに必要なすべてのデータをビュー テンプレートに明示的に渡す必要があります。ビュー テンプレートは、データの取得やアプリケーション ロジックを実行しないでください。代わりに、コントローラーによって渡されたモデル/データから駆動されるレンダリング コードのみを持つように制限する必要があります。
[...]
["ViewModel"] パターンを使用する場合、特定のビュー シナリオ用に最適化され、ビュー テンプレートに必要な動的な値/コンテンツのプロパティを公開する、厳密に型指定されたクラスを作成します。コントローラー クラスは、これらのビューに最適化されたクラスを設定し、使用するビュー テンプレートに渡すことができます。これにより、ビュー テンプレート内でタイプ セーフ、コンパイル時のチェック、およびエディターの Intellisense が有効になります。