![](/img/trans.png)
[英]Can we assign a ViewModel to a ViewData object in ASP.Net MVC?
[英]ViewData and ViewModel in MVC ASP.NET
我是.Net开发的新手,现在正在关注NerdDinner教程。 只是想知道你们中是否有人能告诉我
ViewData和ViewModel之间有什么区别
(我所知道的是他们习惯于将某些形式的数据从控制器传递到视图)并且可能告诉我应该在什么情况下使用ViewData而不是ViewModel,反之亦然
提前致谢!
出击
什么是ViewData?
ViewData示例
Controller Action方法喜欢:
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
结论
ViewData的:
简而言之,使用ViewData作为支持数据,例如SelectList的数据源。
视图模型:
当Controller类决定将HTML响应呈现给客户端时,它负责显式传递给视图模板呈现响应所需的所有数据。 视图模板永远不应该执行任何数据检索或应用程序逻辑 - 而应该将自己限制为仅具有由控制器传递给它的模型/数据驱动的渲染代码。
[...]
当使用[ViewModel]模式时,我们创建强类型类,这些类针对我们的特定视图场景进行了优化,并公开了视图模板所需的动态值/内容的属性。 然后,我们的控制器类可以填充这些视图优化类并将其传递给我们的视图模板以供使用。 这样可以在视图模板中实现类型安全,编译时检查和编辑器智能感知。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.