C# 带viewbags的MVC数据集
如何将数据集放入viewbag并在视图中显示结果? 我有一个模型中的数据集,我将其写入一个viewbag。我想使用foreach循环从视图中的viewbag中获取数据行 我已经有一个变量进入视图,因此无法正常传递数据集。我还将有许多其他数据集每页。因此,我认为viewbag是解决这个问题的最佳方式。 模型 控制器:C# 带viewbags的MVC数据集,c#,html,sql,asp.net-mvc,C#,Html,Sql,Asp.net Mvc,如何将数据集放入viewbag并在视图中显示结果? 我有一个模型中的数据集,我将其写入一个viewbag。我想使用foreach循环从视图中的viewbag中获取数据行 我已经有一个变量进入视图,因此无法正常传递数据集。我还将有许多其他数据集每页。因此,我认为viewbag是解决这个问题的最佳方式。 模型 控制器: DataSet data = new DataSet(); modeldata getdata = new modeldata (); ViewBag.Data = getda
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
视图:
要在视图中显示数据,有两个选项。一种是将模型类的实例传递给强类型视图。第二个选项是使用ViewBag。在您的例子中,看起来您两种方法都做了一点,但我建议使用强类型视图方法 该视图将具有一个
Model
属性,该属性表示由@Model
声明指定的类类型的实例。在您的代码中,您使用的是无法工作的控制器类。我重写了这个示例,使用数据集
作为模型。如您所见,视图的Model
属性成为System.Data.DataSet
类的一个实例,并具有其所有属性和方法
查看
@Model System.Data.DataSet;
foreach (DataRow row in Model.Rows)
{
@:row["id"] + " " + row["name"];
}
@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();
return View(getdata.readrows(data));
DataSet data = new DataSet();
modeldata getdata = new modeldata();
getdata.DataSets["sampleData"] = modeldata.ReadRows(data);
return View(getdata);
编辑:
下面是一个在模型类中使用字典存储多个数据集的示例。然后,可以修改视图以使用modeldata类型作为其模型类
型号
namespace Site.Models
{
class modeldata
{
public Dictionary<string, DataSet> DataSets { get; set; }
public static DataSet ReadRows(DataSet dataset)
{
//returns data from sql query.
}
}
}
控制器
DataSet data = new DataSet();
modeldata getdata = new modeldata();
return View(getdata.readrows(data));
DataSet data = new DataSet();
modeldata getdata = new modeldata();
getdata.DataSets["sampleData"] = modeldata.ReadRows(data);
return View(getdata);
您需要创建一个模型类,将每个数据集作为属性包含,例如:
public class MyModel
{
DataSet data1,
DataSet data2,
DataSet data3
}
然后返回绑定到类型“MyModel
”的强类型视图,该视图将允许您执行以下操作:
var myDataInTheView = model.data1;
然后,您可以像其他人所描述的那样使用foreach方法,但使用的是模型的属性,而不是模型类本身。在上面的代码片段中,循环查看
myDataInTheView
我在视图中还有其他内容,我计划每页有多个数据集,因此无法返回它。是否有其他方法可以从视图访问它?@user719825:只需创建一个ViewModel类,该类包含要发送到视图和数据集的“其他内容”。这样一个对象就可以满足这两个需求。嗯,这真是一个有趣的方法。你能给我举个例子吗?我编辑了我的答案来说明这一点。您可以在modeldata
类中创建属性来存储所需的其他数据。很抱歉延迟。我还在做这个。我认为这个例子唯一的问题是,foreachloop中仍然不存在行,因为“dataset”是一个属性。我缺少什么吗?为什么在MVC应用程序中使用数据集?如果处理数据模型和包含100条SQL语句的ORM.legacy代码,情况会好得多。没有时间转换此项目。那么,实际问题是什么?问题是:如何将数据集放入viewbag并在视图中显示行。我上面有一个foreach示例。foreach
示例有效吗?如果没有,什么不起作用?假设类型Model.data
与ViewBag.data.Rows
中的项目相同,则您提供的代码应该可以工作。我想这可能需要DataRow
,但我已经有一段时间没有处理数据集了。