MVC4中ViewBag中的可枚举对象

时间:2013-06-20 09:40:59

标签: asp.net-mvc-4 razor

我有以下型号说F:

public partial class F 
{
    [Key, Display(Name = "Id")]
    public int FId { get; set; }

    public int RId { get; set; }

    public int FTId { get; set; }

    public string C { get; set; }

    public string U { get; set; }

    public string D { get; set; }

    [ScaffoldColumn(false)]
    public System.DateTimeOffset Created { get; set; }

}

在控制器中,我必须从数据库中读取“F”的所有记录,并将它们分配给可枚举的记录列表。

例如:

 ViewBag.Cs = enumerable C column items (textbox)
 ViewBag.Us= enumerable U column items (textbox)
 ViewBag.FTIDs = enumerable FTId column items (this has to be a dropdown)

在我必须要展示

 @Html.Textbox(Cs);
 @Html.Dropdown(FTIDs);

我只给出了文本框和投影,作为一个例子,可能有许多其他控件,如日期时间,复选框等, 我应该能够将每列写为viewbag中的列表a并在MVC View中显示它。

有人可以建议这是否可以实现以及如何实现?

非常感谢......

1 个答案:

答案 0 :(得分:0)

不要将viewbag用于此类 - 而是将视图强烈绑定到模型。如果你有一些非常小的东西可以使用一个视图包......任何复杂的你应该总是使用一个强类型的视图模型,你会得到智慧,它必须更清洁单元测试

查看型号:

Public class MyViewModel
{
      public List<F> MyListOfFObjects { get; set; }
}

现在,当您创建视图时,可以在弹出窗口中将其绑定到此视图模型,或者如果您不想重新创建它,只需在视图顶部添加对它的引用,如下所示:

@model <your project>.<folder view model is in>.<view model name>

例如

@model AdventureWorks.Models.EmployeeViewModel。

在您的控制器中,您只需创建此视图模型并将其传递给您的视图,例如:

public ActionResult Index()
{
  MyViewModel vm = new MyViewModel();
  // Initialize your view model
  // Get all the F objects from the database and populate the list

  return View(vm); // now your view will have the view model
}

现在在视图中,您可以遍历此视图模型

@foreach(var fObject in Model)
{
  @Html.TextBoxFor(m => m.fId)
  @Html.TextBoxFor(m => m.rID)
}

以下是您可以使用btw

的不同@Html帮助程序列表的链接

http://qkview.com/techbrij/aspnet-mvc-4

强绑定视图的参考:

http://www.asp.net/mvc/tutorials/views/dynamic-v-strongly-typed-views