asp.net-mvc – MVC模型绑定到集合不以0索引开头的集合
发布时间:2020-05-24 07:03:40 所属栏目:asp.Net 来源:互联网
导读:我正在尝试对集合中项目的属性执行远程验证.验证在集合的第一个项目上正常工作.验证方法的http请求如下所示: /Validation/IsImeiAvailable?ImeiGadgets[0].ImeiNumber=123456789012345 然而,在URL的第二个项目中,验证不起作用 /Validation/IsImeiAvailable?I
|
我正在尝试对集合中项目的属性执行远程验证.验证在集合的第一个项目上正常工作.验证方法的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 – 在表单提交时传递整个模型
- ASP.NET微信公众号用于给指定OpenId用户发送红包
- asp.net中Session缓存与Cache缓存的区别分析
- ASP.NET身份验证 – 多个应用程序的一个登录系统
- 在ASP.NET中创建搜索功能
- azure – 创建App Service订阅EMPTY
- asp.net – CultureInfo.CurrentCulture从中读取文化
- asp.net – 通过javascript禁止文本框中的退格
- asp.net – 如何以编程方式将位置元素添加到Web配置?
- asp.net – 控制FormsAuthentication createPersistentCook
推荐文章
站长推荐
- ASP.NET线程敏捷 – 如何克服?
- asp.net-mvc – 如何扩展html.textboxfor以删除n
- .net – VS2017 15.3解决方案文件中的新GlobalSe
- asp.net – 部署后初始加载时出现奇怪的log4net引
- asp.net-mvc-2 – 在自定义模型绑定器中设置Mode
- asp.net-mvc – 什么时候使用ViewData而不是View
- ASP.NET缓存 方法和最佳实践
- ASP.NET MVC Web应用程序与ASP.NET Web应用程序
- 一段时间后的第一个请求总是很慢 – ASP.NET MVC
- 如果您已实施ASP.NET路由,则ASP.NET中的PageMeth
热点阅读
