如何将数据集放入视图包并在视图中显示结果?
我有一个模型中的数据集,我写入了一个视图包。我想使用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"];
}
答案 0 :(得分:7)
要在视图中显示数据,您有两个选择。一种是将Model类的实例传递给强类型视图。第二个选项是使用ViewBag。在您的情况下,看起来您正在做两件事,但我建议使用强类型视图方法。
View将具有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的示例。然后,您可以修改视图以使用modeldata类型作为其Model类。
<强>模型强>
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);
答案 1 :(得分:1)
您需要创建一个模型类以将每个数据集包含为属性,例如:
public class MyModel
{
DataSet data1,
DataSet data2,
DataSet data3
}
然后返回绑定到类型“MyModel
”的强类型视图,然后在视图中允许您执行此操作:
var myDataInTheView = model.data1;
然后您可以像其他人描述的那样使用foreach方法,但是使用模型的属性,而不是模型类本身。在上面的代码段中,循环遍历myDataInTheView