关于mvc中传入DataTable到视图的应用
MVC 中 如果是多表连接查询出的数据需要重新定义一个ViewModel,觉得很是麻烦,所以可以通过传一个DataTable到视图中可以避免这个问题
但是不知道会有什么不好的地方,有这方面经验的大神有什么看法可以讨论一下。
好了, 直接上代码
public ActionResult Index()
{
var data = from a in db join b in ef.Grade on a.id equals b.id
select new {myname=a.name,gade=b.name};
DataTable dt = LINQToDataTable(data);
return View(dt);
}
//将IEnumerable<T>类型的集合转换为DataTable类型
public DataTable LINQToDataTable<T>(IEnumerable<T> varlist)
{ //定义要返回的DataTable对象
DataTable dtReturn = new DataTable();
// 保存列集合的属性信息数组
PropertyInfo[] oProps = null;
if (varlist == null) return dtReturn;//安全性检查
//循环遍历集合,使用反射获取类型的属性信息
foreach (T rec in varlist)
{
//使用反射获取T类型的属性信息,返回一个PropertyInfo类型的集合
if (oProps == null)
{
oProps = ((Type)rec.GetType()).GetProperties();
//循环PropertyInfo数组
foreach (PropertyInfo pi in oProps)
{
Type colType = pi.PropertyType;//得到属性的类型
//如果属性为泛型类型
if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition()
== typeof(Nullable<>)))
{ //获取泛型类型的参数
colType = colType.GetGenericArguments()[0];
}
//将类型的属性名称与属性类型作为DataTable的列数据
dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
}
}
//新建一个用于添加到DataTable中的DataRow对象
DataRow dr = dtReturn.NewRow();
//循环遍历属性集合
foreach (PropertyInfo pi in oProps)
{ //为DataRow中的指定列赋值
dr[pi.Name] = pi.GetValue(rec, null) == null ?
DBNull.Value : pi.GetValue(rec, null);
}
//将具有结果值的DataRow添加到DataTable集合中
dtReturn.Rows.Add(dr);
}
return dtReturn;//返回DataTable对象
}
在视图中和强视图引用的方式一样
@model System.Data.DataTable
之后可以这么调用
<table>
@foreach (System.Data.DataRow dr in Model.Rows)
{
<tr>
<td>
@dr["myname"]
</td>
<td>
@dr["gade"]
</td>
</tr>
}
</table>
关于mvc中传入DataTable到视图的应用的更多相关文章
- ASP.NET MVC中从前台页面视图(View)传递数据到后台控制器(Controller)方式
方式一: 数据存储模型Model:此方式未用到数据存储模型Model,仅简单的字符串string型数据传递 前台接收显示数据视图View: <div style="height:300 ...
- MVC中从控制器到视图的数据传递方法汇总
1.ViewData对象概述ViewData是一种字典集合数据,是"视图基类"和"控制器基类"的属性常见用法是在控制器中写入数据,在视图中读取数据ViewDat ...
- 在ASP.NET MVC中加载部分视图的方法及差别
在视图里有多种方法可以加载部分视图,包括Partial() .Action().RenderPartial().RenderAction().RenderPage()方法.下面说明一下这些方法的差别. ...
- 关于.net MVC中主视图和分部视图的数据共享遇到的问题
今天在开发web时因为调用到的分部视图需要有个隐藏域.然后因为当我们第一次调用分部视图时,是用 @Html.Partial("DetailDataPart")在主视图里把它嵌进去主 ...
- mvc中传入字典的模型项的类型问题
刚项目一直报这个错,找了一会发现忘了给他模型项了,我把这个小问题纪录下来,希望你们别犯这个小错
- Asp.net mvc 中View 的呈现(二)
[toc] 上一节介绍了 Asp.net mvc 中除 ViewResult 外的所有的 ActionResult,这一节介绍 ViewResult. ViewResultBase ViewResul ...
- asp.net -mvc框架复习(4)-ASP.NET MVC中的约定规则
1.路由规则 using System;using System.Collections.Generic;using System.Linq;using System.Web;using System ...
- asp.net mvc 强类型视图中传入List 数据到控制器
问题来源: 在和一位技术老师聊天时,老师问我一个mvc 表单提交的问题,问道:怎样在表单提交的时候,将 带有 List 属性的对象传入控制器? 这时,我有点呆了,以前一直都好像是 单一属性的表单提交, ...
- mvc的视图中显示DataTable的方法
mvc的视图中显示DataTable的方法: 不断的循环画出table @{ ViewBag.Title = "ShowDataTable"; } @using System.Da ...
随机推荐
- Spinnerd的功能和用法
此处的Spinner其实是一个列表选择框.不过Android的列表选择框并不是需要下拉列表的,而是相当于弹出一个菜单供用户选择. Spinner和Gallery都继承了AbsSpinner,AbsSp ...
- xtemplate语法
XTemplate 是富逻辑的 KISSY 模板引擎,面向复杂的业务逻辑场景,同时保持高性能和丰富的配置方法,是易学易懂的模板语言. 一个典型的XTemplate模板实例: Hello {{name} ...
- JS与浏览器的几个兼容性问题
第一个:有的浏览器不支持getElementsByClassName(),所以需要写一个function()来得到需要标签的class,然后进行class的增加.删除等操作. 第二个:在需要得到特定标 ...
- DTLS-PSK算法抓包解析
一.DTLS -PSK PSK 是DTLS 定义的密钥交换方案之一,相对于公钥证书方案(如 ECDHA_RSA) 来说,其具备更加轻量化.高效的优点: 而目前 PSK方案应用也比较广泛. 关于DTLS ...
- ubuntu 更新引导命令
sudo update-grub 运行结果: Generating grub configuration file ...Warning: Setting GRUB_TIMEOUT to a non- ...
- [html5] 学习笔记-bootstrap介绍
1.Bootstrap介绍 Bootstrap 是最受欢迎的 HTML.CSS 和 JS 框架,用于开发响应式布局.移动设备优先的 WEB 项目. 2.下面对于官网上给出的最简单的一个bootstra ...
- java中函数是值传递还是引用传递?
相信有些同学跟我一样,曾经对这个问题很疑惑.在网上也看了一些别人说的观点,评论不一.有说有值传递和引用传递两种,也有说只有值传递的,这里只说下个人见解 先看一个例子 public class Test ...
- java实现解析二进制文件(字符串、图片)
1.需求说明,实现细节要求: 解析二进制文件 files\case10\binary,其中包含一个字符串和一张图片,数据文件格式为字符串数据长度(2字节)+字符串内容+图片数据长度(4字节)+图片数据 ...
- Linux如何创建一个进程
关于准备知识: 每个进程都有以下属性: 1 地址空间 每个进程都有自己的进程地址空间,格式大概是这个样子: 栈(Stack)以帧为单位,当程序调用函数(假如该函数名为fun01)时,stack会向下 ...
- PHP变量处理之serialize
官方定义: string serialize ( mixed $value ) serialize() 返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方.这有利于存储或传递 P ...