Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带viewbags的MVC数据集_C#_Html_Sql_Asp.net Mvc - Fatal编程技术网

C# 带viewbags的MVC数据集

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

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

我有一个模型中的数据集,我将其写入一个viewbag。我想使用foreach循环从视图中的viewbag中获取数据行

我已经有一个变量进入视图,因此无法正常传递数据集。我还将有许多其他数据集每页。因此,我认为viewbag是解决这个问题的最佳方式。

模型

控制器:

 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
,但我已经有一段时间没有处理数据集了。