我应该什么时候使用 ViewBag/model?
When should I use ViewBag/model?
我认为使用 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比model简单
所以,你能告诉我:我应该什么时候使用ViewBag/model?
如果您想要将强类型的消息添加到您的视图模型,请使用模型。否则,坚持使用 ViewBag。
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
)
我认为使用 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比model简单
所以,你能告诉我:我应该什么时候使用ViewBag/model?
如果您想要将强类型的消息添加到您的视图模型,请使用模型。否则,坚持使用 ViewBag。
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
)