asp.net-mvc – 向RouteValueDictionary添加复杂类型的数组
发布时间:2020-12-16 00:12:28 所属栏目:asp.Net 来源:网络整理
导读:我想知道是否有一种优雅的方法可以将一组复杂类型添加到RouteValueDictionary或兼容类型? 例如,如果我有一个类和一个动作: public class TestObject{ public string Name { get; set; } public int Count { get; set; } public TestObject() { } public Te
我想知道是否有一种优雅的方法可以将一组复杂类型添加到RouteValueDictionary或兼容类型?
例如,如果我有一个类和一个动作: public class TestObject { public string Name { get; set; } public int Count { get; set; } public TestObject() { } public TestObject(string name,int count) { this.Name = name; this.Count = count; } } public ActionResult Test(ICollection<TestObjects> t) { return View(); } 然后我知道如果我通过URL调用此操作“/Test?t[0].Name=Oneu0026amp;t[0].Count=1u0026amp;t[1].Name=Twou0026amp;t[1].Count= 2“MVC会自动将这些查询字符串参数映射回ICollection类型.但是,如果我使用Url.Action()在某处手动创建链接,并且我想传递参数的RouteValueDictionary,当我向RouteValueDictionary添加ICollection时,Url.Action只是将其呈现为类型,如& T = System.Collections.Generic.List. 例如: RouteValueDictionary routeValDict = new RouteValueDictionary(); List<TestObject> testObjects = new List<TestObject>(); testObjects.Add(new TestObject("One",1)); testObjects.Add(new TestObject("Two",2)); routeValDict.Add("t",testObjects); // Does not properly create the parameters for the List<TestObject> collection. string url = Url.Action("Test","Test",routeValDict); 有没有办法让它自动将该集合呈现为MVC也理解如何映射的格式,或者我必须手动执行此操作? 我错过了什么,为什么他们会这样做,所以这个美丽的映射存在于一个Action中,但没有提供一种手动反向创建URL的方法? 解决方法
我也遇到了这个问题,并使用了Zack的代码,但发现了一个错误.如果IEnumerable是一个字符串数组(string []),则存在问题.所以我认为我会分享我的扩展版本.
public static RouteValueDictionary ToRouteValueDictionaryWithCollection(this RouteValueDictionary routeValues) { var newRouteValues = new RouteValueDictionary(); foreach(var key in routeValues.Keys) { object value = routeValues[key]; if(value is IEnumerable && !(value is string)) { int index = 0; foreach(object val in (IEnumerable)value) { if(val is string || val.GetType().IsPrimitive) { newRouteValues.Add(String.Format("{0}[{1}]",key,index),val); } else { var properties = val.GetType().GetProperties(); foreach(var propInfo in properties) { newRouteValues.Add( String.Format("{0}[{1}].{2}",index,propInfo.Name),propInfo.GetValue(val)); } } index++; } } else { newRouteValues.Add(key,value); } } return newRouteValues; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 如何在mvc3中对来自@ Html.LabelFor()的内容进行
- asp.net – 如何更改F#Canopy UI测试脚本中的下拉列表
- asp.net – 我如何做一个已经内置到dll中的程序集,特别是fl
- OData选择查询无法在ASP.NET WebAPI beta中使用
- asp.net-mvc – 如何使用表单身份验证提供保持登录功能?
- asp.net-mvc – ASP.NET MVC 5和Web API 2 .NET要求
- .net – 关于强名称验证跳过的奇怪问题
- asp.net MVC数据库驱动的导航菜单
- asp.net – 如何为WCF服务创建重定向?
- ASP.NET MVC下的四种验证编程方式[续篇]
推荐文章
站长推荐
- CompTIA PK0-003 认证
- ASP.NET MVC在httpPost之后返??回Index视图
- entity-framework – 如何告诉UserManager.FindB
- asp.net-mvc – 使用FileStreamResult删除临时文
- Asp.net System.Web.HttpContext.Current.Sessio
- asp.net-mvc – 何时使用RedirectToAction和哪里
- asp.net – 如何解决找不到ContentPlaceHolder错
- asp.net-mvc – 我的ASP.NET MVC控制器应该如何识
- asp.net-mvc – 如何测试MVC控制器的事件
- asp.net 操作FTP作为数据中转-Helper.cs
热点阅读