Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.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# 用存储过程SELECT语句输出填充HTML表_C#_Asp.net Mvc_Entity Framework_Sql Server 2008_Stored Procedures - Fatal编程技术网

C# 用存储过程SELECT语句输出填充HTML表

C# 用存储过程SELECT语句输出填充HTML表,c#,asp.net-mvc,entity-framework,sql-server-2008,stored-procedures,C#,Asp.net Mvc,Entity Framework,Sql Server 2008,Stored Procedures,我正在使用C.NETMVC4和实体框架来执行一个存储过程。我有一个在存储过程中运行的查询,看起来像: Select Column1, Column2, Column3 from TestTable Where StatusId = 3; 假设返回大约50行。我试图将SELECT语句的输出放入视图中的HTML表中。我以前没有做过这种事情,所以我不确定最好的方法。那么多的数据可以在输出参数中发送回控制器。如果是这样的话,我不太理解将数据格式化到HTML表中的方法 我以前也做过类似的事情,但在这种情

我正在使用C.NETMVC4和实体框架来执行一个存储过程。我有一个在存储过程中运行的查询,看起来像:

Select Column1, Column2, Column3
from TestTable
Where StatusId = 3;
假设返回大约50行。我试图将SELECT语句的输出放入视图中的HTML表中。我以前没有做过这种事情,所以我不确定最好的方法。那么多的数据可以在输出参数中发送回控制器。如果是这样的话,我不太理解将数据格式化到HTML表中的方法

我以前也做过类似的事情,但在这种情况下,我每次只返回一行,所以我只是在输出参数中将数据发送回控制器,然后在ViewBag中将其发送到我的视图。使用多行的最佳方法是什么


谢谢

在edmx中,存储过程将生成一个复杂类型,它本质上是结果集某一行的数据结构

调用存储过程时,可以将复杂类型的结果集直接传递给视图,也可以将存储过程的复杂类型制作成viewmodel版本并传递给视图

然后在您的视图中,您只需要在模型中创建一个表和foreach项,创建一个表并相应地填充控制器中的数据单元

ICollection<Object> data = your stored procedure result here...
ViewBage.data = data;
在您的页面中

foreach (var rowin ViewBag.data)
{
    <tr>
        <td>@row.Fieldx</td>
    </tr>
}
在模型中创建映射表属性的实体。 例:

MyTableMapping{ int col1{get;set;} 字符串col2{get;set;} .... }

在控制器中,执行一个存储过程,并将结果强制转换为之前创建的yout模型映射集合。 调用视图时,将其传递为集合

公共行动结果指数{ [从数据库加载数据的代码] ... 返回您的收藏; }

在视图cshtml文件中,设置与IEnumerable相同的类型模型 然后为MVC4使用Web网格。 这里有一个例子:


再见。

将通过使用实体框架传递参数值来调用存储过程

配置实体框架后,下一步是在实体框架模型中导入存储过程。为此,您需要右键单击实体模型并选择“从数据库更新模型”选项

存储过程在控制器中调用,实体返回到视图。 解释得很好