asp.net-mvc-2 – 在自定义模型绑定器中设置ModelState值
发布时间:2020-12-16 00:07:50 所属栏目:asp.Net 来源:网络整理
导读:我在ASP.NET MVC 2中使用自定义模型绑定器,如下所示: public override object BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext) { if (controllerContext == null) { throw new ArgumentNullException("controllerConte
我在ASP.NET MVC 2中使用自定义模型绑定器,如下所示:
public override object BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext) { if (controllerContext == null) { throw new ArgumentNullException("controllerContext"); } if (bindingContext == null) { throw new ArgumentNullException("bindingContext"); } BaseContentObject obj = (BaseContentObject)base.BindModel(controllerContext,bindingContext); if(string.IsNullOrWhiteSpace(obj.Slug)) { // creating new object obj.Created = obj.Modified = DateTime.Now; obj.ModifiedBy = obj.CreatedBy = controllerContext.HttpContext.User.Identity.Name; // slug is not provided thru UI,derivate it from Title; property setter removes chars that are not allowed obj.Slug = obj.Title; ModelStateDictionary modelStateDictionary = bindingContext.ModelState; modelStateDictionary.SetModelValue("Slug",new ValueProviderResult(obj.Slug,obj.Slug,null)); ... 当我从这个绑定器返回到控制器操作时,我作为操作参数提供的业务对象被正确更改(行obj.Created = …. work). 但是,ModelState不会更新.我知道这是因为我在业务对象的Slug属性上有必需,虽然我在自定义模型绑定器中修改了ModelStateDictionary,为它提供了一个Slug(如上所示),但ModelState.IsValid仍然是假的. 如果我在调试会话的Watch窗口中放入ModelState [“Slug”],它会说它有错误(1),所以显然它是空的,因此失败了. 如何正确更改自定义模型绑定器代码中的ModelState? 解决方法
显然,一旦更改了某个键的值,就无法重新验证ModelState. IsValid仍然为false,因为为某个键设置新值不会触发重新验证.
解决方案是首先删除触发IsValid为false的密钥并重新创建它并为其分配值.当你这样做时,ModelState会自动重新生效,如果一切正常,则IsValid返回true. 喜欢这个: bindingContext.ModelState.Remove("Slug"); bindingContext.ModelState.Add("Slug",new ModelState()); bindingContext.ModelState.SetModelValue("Slug",null)); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 属性路由和本地化问题
- TreeView递归绑定无限分类数据
- WCF技术剖析之三十:一个很有用的WCF调用编程技巧[上篇]
- asp.net-mvc – MVC模型中的数据库查询
- asp.net – 你能使用基于属性的WebApi 2与WebForms的路由吗
- asp.net-mvc – 如何从mvc中的控制器中设置隐藏字段的值
- asp.net-mvc – 如何从URL获取ID作为参数
- asp.net-mvc-3 – 在MVC 3视图模型上使用Editable属性
- asp.net – 如何将JsonResult对象作为字符串获取,以便我可以
- asp.net – 如何有效地使用Server.Transfer
推荐文章
站长推荐
- 用ADO.NET处理层次数据
- asp.net-core – 如何将ASP.NET 5从Beta6升级到B
- asp.net-mvc-3 – 在代码MVC Razor中呈现局部视图
- asp.net – ASMX服务在开发服务器上工作,部署到I
- asp.net-mvc – 在ASP.NET MVC 4中的用户控制等效
- 具有前缀的控件的Asp.Net MVC2 Clientside验证问
- asp.net-mvc – 如何检查哪个动作方法呈现当前视
- JS_正则表达式_使用字符串创建的正则表达式_反斜
- ASP.NET MVC – MapRoute与routes.Add(和404s)
- asp.net-mvc-3 – ASP.NET MVC 3 – 验证问题
热点阅读