我是.Net开发的新手,现在正在关注NerdDinner教程。只是想知道你是否有人能告诉我
ViewData之间有什么区别 和ViewModel
(我知道他们习惯将某些形式的数据从控制器传递到视图)并且可能告诉我应该在什么情况下使用ViewData而不是ViewModel,反之亦然
提前致谢!
萨利
答案 0 :(得分:10)
什么是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>
什么是ViewModel?
就像:
如何将ViewModel与MVC 3一起使用?
域名模型
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
结论
答案 1 :(得分:8)
<强>的ViewData:强>
简而言之,使用ViewData作为支持数据,例如SelectList的数据源。
<强>视图模型:强>
当Controller类决定将HTML响应呈现给a时 客户,它负责 显式传递给视图 模板所需的所有数据 呈现响应。查看模板 永远不应该执行任何数据 检索或应用程序逻辑 - 和 应该限制自己 只有渲染代码 驱逐出传递给的模型/数据 它是由控制器。
[...]
使用[ViewModel“]模式时,我们会创建强类型 为我们优化的类 具体的视图场景,以及哪些 公开动态的属性 我们的观点所需的价值/内容 模板。我们的控制器类可以 然后填充并传递这些 视图优化的类到我们的视图 要使用的模板。这使得 类型安全,编译时检查, 和视图中的编辑器智能感知 模板。