我认为使用ViewBag比模型更快。
我的例子是:
在行动中:
public ActionResult MyAction()
{
ViewBag.Data = (from m in myDatabase.myTable select m).ToList();
}
在视图中:
@foreach(var item in ViewBag.Data)
{
<tr>
<td>@item.myColumn</td>
</tr>
}
使用模型:
[Table("tbl_mytable")]
public class MyTable()
{
public int Id { get; set; }
public int Column2 { get; set; }
public int Column3 { get; set; }
// ...
public IEnumerable<MyTable> Data { get; set; }
}
在模型中:
public class MainClass
{
public List<MyTable> MyMethod()
{
List<MyTable> list = new List<MyTable>();
// code logic to find data in database and add to list
list.Add(new MyTable
{
Column2 = ...
Column3 = ...
});
return list;
}
}
在行动中:
public ActionResult MyAction()
{
MainClass mc = new MainClass();
MyTable model = new MyTable();
model.Data = mc.MyMethod();
return View(model);
}
在视图中:
@using MyProjectName.Models
@model MyProjectName.Models.MyTable
@foreach(MyTable item in Model.Data)
{
<tr>
<td>@item.Column1</td>
</tr>
}
它们都在工作,ViewBag比模型更容易。
那么,你能告诉我:我什么时候应该使用ViewBag / model?
答案 0 :(得分:0)
如果您希望强类型添加消息到View模型,请使用模型。否则,请坚持使用ViewBag。
答案 1 :(得分:0)
ViewBag
并不快。在这两种情况下,您都要创建List<MyTable>
模型。您为创建“MyTable”模型而显示的所有代码都毫无意义 - 您只需创建一个包含现有集合中重复项的新集合。在控制器中它只需要
public ActionResult MyAction()
{
var model = (from m in myDatabase.myTable select m).ToList();
return View(model);
}
并在视图中
@model List<MyProjectName.Models.MyTable> // a using statement is not required when you use the fully qualified name
@foreach(var item in Model)
{
<tr>
<td>@item.myColumn</td>
</tr>
}
除非您创建分层模型,否则您的MyTable
模型不应具有属性public IEnumerable<MyTable> Data { get; set; }
。
始终在视图中使用模型(最好是视图模型),以便您可以利用强类型(ViewBag
对dynamic
)