【问题标题】:Is using a view model mandatory in MVC在 MVC 中是否强制使用视图模型
【发布时间】:2015-08-16 09:35:36
【问题描述】:

我对 MVC 很陌生,我已经为以下模型创建了模型、视图和控制器

public class Student:Basic
{
    public Guid StudentId { get; set; }
    public string Name { get; set; }
    [ForeignKey("SchoolClass")]
    public virtual Guid StudentClassId { get; set; }
    public virtual SchoolClass SchoolClass { get; set; }
}

在视图中,我想为 Class 创建一个 DropDownList。但我不确定如何在不使用 View-Model 的情况下实现它。许多解决方案要求我使用 SelectList for Class 创建一个 View-Model,并在 Controller 中填充 Class(获取 DB 中的所有类),然后在 View 中使用它。这是这里唯一的选择吗?或者我们可以用任何其他方式填充 DropDown 吗?

【问题讨论】:

  • 您可以将SelectList 分配给ViewBag 属性,但建议使用视图模型,它还有许多其他优点 - 请参阅What is ViewModel in MVC?
  • 在这种情况下,ViewBag 只是视图模型的一部分 ;) - 当然,您也可以 spaghetti code 视图中的所有内容......不是真的: 不要
  • 您可以将任何内容传递给强类型视图 - 这意味着您可以直接传递模型。或者您可以通过动态 ViewBag 传递任何内容。然而,这两种方法很快就会变得不切实际,为了解决它们的问题,无论如何你可能都会求助于 ViewModel。

标签: c# asp.net-mvc asp.net-mvc-4


【解决方案1】:

不必使用模型将选择列表选项传递给视图。您可以像这样在 Razor 中填充您的选择列表:

@{
   var listItems = new List<SelectListItem>();
   listItems.Add(new SelectListItem
   {
      Text = "Item 1",
      Value = "Item 1"
   });
   listItems.Add(new SelectListItem
   {
      Text = "Item 2",
      Value = "Item 2",
      Selected = true
   });
}

@Html.DropDownListFor(model => model.MyValue, listItems, "-- Please choose --")

或者你总是可以有一些带有返回List&lt;SelectListItem&gt;的静态方法的帮助类:

@Html.DropDownListFor(model => model.MyValue, SelectListHelper.GetOptions())

【讨论】:

  • 但是如果我想从控制器填充 DropDownList 值呢?我相信我们可以做到 Ajax 调用,但我认为这比拥有 ViewModel 稍微复杂一点!
  • @MohanPrasath 如果我想从控制器中填充 DropDown,我会为此使用 ViewBag 或 Model
猜你喜欢
  • 2013-04-10
  • 1970-01-01
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
相关资源
最近更新 更多