ASP.NET MVC Action向视图传值之匿名类型
作者: / 2019-08-19 / 浏览次数:

在使用asp.net mvc过程中想必大家都有遇到过一个问题就是我们的action如何向视图传递匿名类型的值呢,如果不做特殊处理则无法实现。

接下来我们来看一个示例:

在我们的控制中:

using system.collections.generic;
using system.web.mvc;
namespace tianya.dotnetshare.mvcdemo.controllers
 public class democontroller : controller
 // get: demo
 public actionresult index
 var liststu = new list dynamic 
 sno="1000",
 name = "张三",
 sex = "男",
 age =20
 sno="1001",
 name = "李四",
 sex = "男",
 age =21
 var stu = new
 sno = "1002",
 name = "钱七七",
 sex = "女",
 age = 20
 viewbag.stu = stu;
 viewbag.liststu = liststu;
 return view;
}

在我们的视图中:

@{
 layout = null;
 !doctype html 
 html 
 head 
 meta name="viewport" content="width=device-width" / 
 title index /title 
 /head 
 body 
 div 
 @foreach 
 p 学号:@,姓名:@,性别:@,年龄:@。 /p 
 学号:@,姓名:@,性别:@,年龄:@。
 /div 
 /body 
 /html 

然后将网站部署到我们的iis上面,接下来来访问一下我们的/demo/index

可以发现报错了,说明传值失败了,那么接下来我们来简单介绍下如何解决这个问题。

首先添加一个扩展方法帮助类:

using system;
using system.collections.generic;
using system.componentmodel;
using system.dynamic;
using system.linq;
using system.xml;
namespace tianya.dotnetshare.commtool
 /// summary 
 /// 扩展方法
 /// /summary 
 public static class extentmethod
 #region 匿名对象处理
 #region 将对象[主要是匿名对象]转换为dynamic
 /// summary 
 /// 将对象[主要是匿名对象]转换为dynamic
 /// /summary 
 public static dynamic todynamic
 idictionary string, object expando = new expandoobject;
 var type = value.gettype;
 var properties = typedescriptor.getproperties;
 foreach 
 var val = property.getvalue;
 if )
 dynamic dval = val.todynamic;
 expando.add;
 else
 expando.add;
 return expando as expandoobject;
 #endregion
 #region 将对象[主要是匿名对象]转换为list dynamic 
 /// summary 
 /// 将对象[主要是匿名对象]转换为list dynamic 
 /// /summary 
 public static list dynamic todynamiclist
 var list = new list dynamic 
 if 
 if )
 list.addrangev).todynamic));
 return list;
 #endregion
 #region 将匿名对象集合转换为xml
 /// summary 
 /// 将匿名对象集合转换为xml
 /// /summary 
 public static xmldocument listobjerttoxml
 var xmldoc = new xmldocument;
 var xmlelem = xmldoc.createelement;
 xmldoc.appendchild;
 if 
 if )
 var node = xmldoc.selectsinglenode;
 foreach 
 var xmlrow = xmldoc.createelement;
 objecttoxml;
 node.appendchild;
 return xmldoc;
 #endregion
 #region 将匿名对象填充xml节点
 /// summary 
 /// 将匿名对象填充xml节点
 /// /summary 
 private static void objecttoxml
 idictionary string, object expando = new expandoobject;
 var type = value.gettype;
 var properties = typedescriptor.getproperties;
 foreach 
 var val = property.getvalue;
 xmlrow.clonenode;
 var xmltemp = xmldoc.createelement;
 xmltext xmltext;
 if )
 dynamic dval = val.todynamic;
 xmltext = xmldoc.createtextnode);
 else
 xmltext = xmldoc.createtextnode);
 xmltemp.appendchild;
 xmlrow.appendchild;
 #endregion
 #endregion
}

然后对我们的控制器做一些调整,增加调用我们的扩展方法:

using system.collections.generic;
using system.web.mvc;
using tianya.dotnetshare.commtool;
namespace tianya.dotnetshare.mvcdemo.controllers
 public class democontroller : controller
 // get: demo
 public actionresult index
 var liststu = new list dynamic 
 sno="1000",
 name = "张三",
 sex = "男",
 age =20
 sno="1001",
 name = "李四",
 sex = "男",
 age =21
 var stu = new
 sno = "1002",
 name = "钱七七",
 sex = "女",
 age = 20
 viewbag.stu = stu.todynamic;
 viewbag.liststu = liststu.todynamiclist;
 return view;
}

处理完后再来访问一下我们的/demo/index

可以看出正常显示了,说明我们的传值成功了。

至此,本章就介绍完了,如果你觉得这篇文章对你有所帮助请记得点赞哦,谢谢!!!

demo源码:

链接:https://pan.baidu.com/s/1_extkkybybfpbf5adt4asw 
提取码:atem

 

版权声明:如有雷同纯属巧合,如有侵权请及时联系本人修改,谢谢!!!

【某某业务】网站建设、网站设计、服务器空间租售、网站维护、网站托管、网站优化、百度推广、自媒体营销、微信公众号
如有意向---联系我们
热门栏目
热门资讯

网站建设 网站托管 成功案例 新闻动态 关于我们 联系我们 服务器空间 加盟合作 网站优化

备案号: 

公司地址:江苏省南京市玄武区玄武湖 咨询QQ:9490489 手机: 电话: