带有viewbags的MVC数据集

时间:2012-03-22 14:42:28

标签: c# html sql asp.net-mvc

如何将数据集放入视图包并在视图中显示结果?

我有一个模型中的数据集,我写入了一个视图包。我想使用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"];
        } 

2 个答案:

答案 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