带有 viewbag 的 MVC 数据集
Posted
技术标签:
【中文标题】带有 viewbag 的 MVC 数据集【英文标题】:MVC datasets with viewbags 【发布时间】:2012-04-07 03:31:56 【问题描述】:如何将数据集放入 viewbag 并在视图中显示结果?
我有一个来自模型的数据集,我将其写入视图包。我想使用 foreach 循环将数据行从视图中的视图包中取出。
我已经有一个变量进入视图,所以我无法正常传递数据集。每页我还将有许多其他数据集。所以我认为 viewbag 是解决这个问题的最佳方法。
型号
class modeldata
public dataset readrows(DataSet dataset)
//returns data from sql query.
控制器:
DataSet data = new DataSet();
modeldata getdata = new modeldata ();
ViewBag.Data = getdata.readrows(data);
return view("page1") //based on case statement.
//Already have a value going into view, so I need to use viewbag
查看:
@Model site.controllers.homecontroller;
foreach (Model.data row in ViewBag.Data.Rows)
@:row["id"] + " " + row["name"];
【问题讨论】:
为什么在 MVC 应用程序中使用数据集?如果您处理数据模型和 ORM,事情会变得更好。 带有 100 条 SQL 语句的旧代码。没有时间为这个项目转换。 那么,真正的问题是什么? 问题是:如何将数据集放入视图包并在视图中显示行。我上面有一个 foreach 示例。foreach
示例是否有效?如果没有,什么不起作用?假设 Model.data
类型与 ViewBag.Data.Rows
中的项目相同,您提供的代码看起来应该可以工作。我认为可能需要DataRow
,但我已经有一段时间没有搞砸数据集了。
【参考方案1】:
要在视图中显示数据,您有两种选择。一种是将 Model 类的实例传递给强类型视图。第二个选项是使用 ViewBag。在您的情况下,您似乎正在同时做一些事情,但我建议使用强类型视图方法。
视图将具有一个Model
属性,该属性表示您的@Model
声明指定的类类型的一个实例。在您的代码中,您正在使用无法工作的控制器类。我重写了示例以使用DataSet
作为模型。如您所见,View 的Model
属性成为System.Data.DataSet
类的一个实例,并具有其所有属性和方法。
查看
@Model System.Data.DataSet;
foreach (DataRow row in Model.Rows)
@:row["id"] + " " + row["name"];
控制器
DataSet data = new DataSet();
modeldata getdata = new modeldata();
return View(getdata.readrows(data));
编辑:
这是一个使用模型类中的 Dictionary 来存储多个 DataSet 的示例。然后,您可以修改视图以使用模型数据类型作为其模型类。
型号
namespace Site.Models
class modeldata
public Dictionary<string, DataSet> DataSets get; set;
public static DataSet ReadRows(DataSet dataset)
//returns data from sql query.
查看
@Model Site.Models.modeldata;
@foreach (System.Data.DataTable table in Model.DataSets["sampleData"].Tables)
foreach (System.Data.DataRow row in table.Rows)
@:row["id"] + " " + row["name"];
控制器
DataSet data = new DataSet();
modeldata getdata = new modeldata();
getdata.DataSets["sampleData"] = modeldata.ReadRows(data);
return View(getdata);
【讨论】:
我有其他内容进入视图,我计划每页有多个数据集,所以我无法返回它。有没有其他方法可以从视图中到达它? @user719825:只需创建一个 ViewModel 类,其中包含您要发送到视图的“其他内容”和数据集。这样一个对象就可以满足这两种需求。 嗯,这确实是一个有趣的方法。你能给我举个例子吗? 我编辑了我的答案以显示这一点。您可以在modeldata
类中创建属性来存储您需要的其他数据。
抱歉耽搁了。我仍在努力。我认为这个例子的唯一问题是 .Rows 在 foreachloop 中仍然不存在,因为“DataSets”是一个属性。有什么我想念的吗?【参考方案2】:
您需要创建一个模型类来包含每个数据集作为属性,例如:
public class MyModel
DataSet data1,
DataSet data2,
DataSet data3
然后返回绑定到类型“MyModel
”的强类型视图,然后在视图中允许您执行以下操作:
var myDataInTheView = model.data1;
然后,您可以像其他人描述的那样使用 foreach 方法,但要使用模型的属性,而不是模型类本身。在上面的sn-p中,循环myDataInTheView
【讨论】:
以上是关于带有 viewbag 的 MVC 数据集的主要内容,如果未能解决你的问题,请参考以下文章
在使用MVC5 添加视图后 添加的视图中 关键字ViewBag model 等报错。
Angular.Js 性能、大型数据集、ng-repeat、带有过滤器和双向绑定的 html 表
使用 c# 在 mvc4 中使用 viewbag 数据的下拉列表
asp.net mvc中使用linq to sql查询数据集(IQueryable类型) 怎么用foreach循环去数据集的数据?