【发布时间】:2011-07-07 19:52:17
【问题描述】:
我是 .Net 开发的新手,现在正在学习 NerdDinner 教程。只是想知道有没有人能告诉我
ViewData 有什么区别 和视图模型
(我所知道的是它们用于将某种形式的数据从控制器传递到视图)并可能告诉我在什么情况下应该使用 ViewData 而不是 ViewModel,反之亦然
提前致谢!
莎莉
【问题讨论】:
标签: c# asp.net view controller asp.net-mvc-viewmodel
我是 .Net 开发的新手,现在正在学习 NerdDinner 教程。只是想知道有没有人能告诉我
ViewData 有什么区别 和视图模型
(我所知道的是它们用于将某种形式的数据从控制器传递到视图)并可能告诉我在什么情况下应该使用 ViewData 而不是 ViewModel,反之亦然
提前致谢!
莎莉
【问题讨论】:
标签: c# asp.net view controller asp.net-mvc-viewmodel
什么是 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 作为支持数据,比如一个数据源到一个 SelectList。
视图模型:
当控制器类决定将 HTML 响应呈现回 客户,它负责 显式传递给视图 模板所需的所有数据 呈现响应。查看模板 永远不应该执行任何数据 检索或应用程序逻辑 - 和 相反,应该将自己限制在 只有渲染代码是 脱离传递给的模型/数据 它由控制器。
[...]
当使用 [the "ViewModel"] 模式时,我们创建了强类型 为我们优化的类 具体的视图场景,以及 公开动态的属性 我们的观点需要的价值观/内容 模板。我们的控制器类可以 然后填充并传递这些 视图优化类到我们的视图 要使用的模板。这使 类型安全,编译时检查, 和编辑器智能感知 模板。
【讨论】: