asp.net-mvc – MVC模型绑定到集合不以0索引开头的集合
发布时间:2020-12-15 22:45:19 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试对集合中项目的属性执行远程验证.验证在集合的第一个项目上正常工作.验证方法的http请求如下所示: /Validation/IsImeiAvailable?ImeiGadgets[0].ImeiNumber=123456789012345 然而,在URL的第二个项目中,验证不起作用 /Validation/IsImeiAvailable?
我正在尝试对集合中项目的属性执行远程验证.验证在集合的第一个项目上正常工作.验证方法的http请求如下所示:
/Validation/IsImeiAvailable?ImeiGadgets[0].ImeiNumber=123456789012345 然而,在URL的第二个项目中,验证不起作用 /Validation/IsImeiAvailable?ImeiGadgets[1].ImeiNumber=123456789012345 现在我很确定的原因是,绑定不适用于不以零索引开头的集合. 我的验证方法有如下的签名: public JsonResult IsImeiAvailable([Bind(Prefix = "ImeiGadgets")] Models.ViewModels.ImeiGadget[] imeiGadget) 因为我在一个集合中传递一个项目,所以我必须绑定这个东西,但我真正传递的只是一个值. 有没有办法我可以处理这个,而不是把它绑定成一个纯旧的查询字符串. 谢谢 编辑:这是获取Imei变量的快速修复,但我宁愿使用模型绑定: string imeiNumber = Request.Url.AbsoluteUri.Substring(Request.Url.AbsoluteUri.IndexOf("=")+1); 编辑:这是我的ImeiGadget类: public class ImeiGadget { public int Id { get; set; } [Remote("IsImeiAvailable","Validation")] [Required(ErrorMessage = "Please provide the IMEI Number for your Phone")] [RegularExpression(@"(D*d){15,17}",ErrorMessage = "An IMEI number must contain between 15 & 17 digits")] public string ImeiNumber { get; set; } public string Make { get; set; } public string Model { get; set; } } 解决方法
您可以编写一个自定义模型binder:
public class ImeiNumberModelBinder : IModelBinder { public object BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext) { var modelName = bindingContext.ModelName; var request = controllerContext.HttpContext.Request; var paramName = request .Params .Keys .Cast<string>() .FirstOrDefault( x => x.EndsWith(modelName,StringComparison.OrdinalIgnoreCase) ); if (!string.IsNullOrEmpty(paramName)) { return bindingContext .ValueProvider .GetValue(request[paramName]) .AttemptedValue; } return null; } } 然后将其应用于控制器操作: public ActionResult IsImeiAvailable( [ModelBinder(typeof(ImeiNumberModelBinder))] string imeiNumber ) { return Json(!string.IsNullOrEmpty(imeiNumber),JsonRequestBehavior.AllowGet); } 现在,ImeiGadgets [xxx]部分将从查询字符串中被忽略. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- asp.net-mvc – 如何在jqgrid中创建两个页脚行
- asp.net – 伤害表现吗?
- asp.net-mvc – 使用令牌认证访问Web Api的MVC .
- ASP.NET中内联标记的全球化差异
- asp.net-mvc-3 – 在web.config文件中忽略resour
- asp.net-web-api – 使用控制器上的Xml注释的ASP
- asp.net-mvc – 如何覆盖ASP.Net MVC的默认模型绑
- asp.net – 为什么HttpUtility.UrlPathEncode标记
- asp.net-mvc – 与Ninject集成测试
- asp.net-mvc – 死简单的ASP.NET MVC 5密码保护?
热点阅读