广州市民政局网站建设,重庆百度推广排名优化,趣味网页制作,怎么电话销售网站建设在使用ASP.NET MVC过程中想必大家都有遇到过一个问题就是我们的Action如何向视图传递匿名类型的值呢#xff0c;如果不做特殊处理则无法实现。 接下来我们来看一个示例#xff1a; 在我们的控制中#xff1a; using System.Collections.Generic;
using System.Web.Mvc;names… 在使用ASP.NET MVC过程中想必大家都有遇到过一个问题就是我们的Action如何向视图传递匿名类型的值呢如果不做特殊处理则无法实现。 接下来我们来看一个示例 在我们的控制中 using System.Collections.Generic;
using System.Web.Mvc;namespace TianYa.DotNetShare.MvcDemo.Controllers
{public class DemoController : Controller{// GET: Demopublic ActionResult Index(){var listStu new Listdynamic{new{SNo1000,Name 张三,Sex 男,Age 20},new{SNo1001,Name 李四,Sex 男,Age 21}};var stu new{SNo 1002,Name 钱七七,Sex 女,Age 20};ViewBag.stu stu;ViewBag.listStu listStu;return View();}}
} 在我们的视图中 {Layout null;
}!DOCTYPE htmlhtml
headmeta nameviewport contentwidthdevice-width /titleIndex/title
/head
bodydivforeach (var item in ViewBag.listStu){p学号(item.SNo)姓名(item.Name)性别(item.Sex)年龄(item.Age)。/p}p学号(ViewBag.stu.SNo)姓名(ViewBag.stu.Name)性别(ViewBag.stu.Sex)年龄(ViewBag.stu.Age)。/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/// 扩展方法/// /summarypublic static class ExtentMethod{#region 匿名对象处理#region 将对象[主要是匿名对象]转换为dynamic/// summary/// 将对象[主要是匿名对象]转换为dynamic/// /summarypublic static dynamic ToDynamic(this object value){IDictionarystring, object expando new ExpandoObject();var type value.GetType();var properties TypeDescriptor.GetProperties(type);foreach (PropertyDescriptor property in properties){var val property.GetValue(value);if (property.PropertyType.FullName.StartsWith(f__AnonymousType)){dynamic dval val.ToDynamic();expando.Add(property.Name, dval);}else{expando.Add(property.Name, val);}}return expando as ExpandoObject;}#endregion#region 将对象[主要是匿名对象]转换为Listdynamic/// summary/// 将对象[主要是匿名对象]转换为Listdynamic/// /summarypublic static Listdynamic ToDynamicList(this IEnumerabledynamic values){var list new Listdynamic();if (values ! null){if (values.Any()){list.AddRange(values.Select(v ((object)v).ToDynamic()));}}return list;}#endregion#region 将匿名对象集合转换为XML/// summary/// 将匿名对象集合转换为XML/// /summarypublic static XmlDocument ListObjertToXML(this IEnumerabledynamic values){var xmlDoc new XmlDocument();var xmlElem xmlDoc.CreateElement(DocumentElement);xmlDoc.AppendChild(xmlElem);if (values ! null){if (values.Any()){var node xmlDoc.SelectSingleNode(DocumentElement);foreach (var item in values){var xmlRow xmlDoc.CreateElement(Row);ObjectToXML(item, xmlDoc, xmlRow);node.AppendChild(xmlRow);}}}return xmlDoc;}#endregion#region 将匿名对象填充XML节点/// summary/// 将匿名对象填充XML节点/// /summaryprivate static void ObjectToXML(object value, XmlDocument xmlDoc, XmlElement xmlRow){IDictionarystring, object expando new ExpandoObject();var type value.GetType();var properties TypeDescriptor.GetProperties(type);foreach (PropertyDescriptor property in properties){var val property.GetValue(value);xmlRow.CloneNode(false);var xmlTemp xmlDoc.CreateElement(property.Name);XmlText xmlText;if (property.PropertyType.FullName.StartsWith(f__AnonymousType)){dynamic dval val.ToDynamic();xmlText xmlDoc.CreateTextNode(dval.ObjectToString());}else{xmlText xmlDoc.CreateTextNode(val.ToString());}xmlTemp.AppendChild(xmlText);xmlRow.AppendChild(xmlTemp);}}#endregion#endregion}
} 然后对我们的控制器做一些调整增加调用我们的扩展方法 using System.Collections.Generic;
using System.Web.Mvc;using TianYa.DotNetShare.CommTool;namespace TianYa.DotNetShare.MvcDemo.Controllers
{public class DemoController : Controller{// GET: Demopublic ActionResult Index(){var listStu new Listdynamic{new{SNo1000,Name 张三,Sex 男,Age 20},new{SNo1001,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 版权声明如有雷同纯属巧合如有侵权请及时联系本人修改谢谢 转载于:https://www.cnblogs.com/xyh9039/p/11348684.html