asp.net-mvc-2 – 在自定义模型绑定器中设置ModelState值
发布时间:2020-05-23 21:46:26 所属栏目:asp.Net 来源:互联网
导读:我在ASP.NET MVC 2中使用自定义模型绑定器,如下所示: public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { if (controllerContext == null) {
|
我在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 C#
- asp.net – 如何设置IHttpAsyncHandler超时?
- iis-7 – 使用ASP.NET MVC3,如何在区分大小写的路由中使IIS
- ASP.NET mvc 2验证始终显示初始页面加载时的错误
- asp.net-mvc – ASP.NET MVC 3 Beta 1 Block访问Razor视图
- asp.net – 如何在selectindexchanged下拉列表后避免页面刷
- Asp.net MVC scheduler的实现方法详解
- 在ASP.NET 5中获取AuthenticationProperties
- 向ASP.NET Gridview添加动态列
- asp.net-web-api – Web API中的OData POST的媒体资源支持
推荐文章
站长推荐
- asp.net-mvc – 如何使用MVC3 Razor布局页面?
- 用户登录时,ASP.NET Core更改EF连接字符串
- asp.net-mvc – ASP.NET MVC编辑集合最佳实践 –
- asp.net – 在MVC中使用iTextSharp在MVC Razor中
- asp.net-mvc – Visual Studio 2010 Web发布缺少
- asp.net-mvc – asp.net mvc多语言urls /路由
- asp.net-mvc – 我们可以为ASP.NET MVC 5中的角色
- 服务层和ASP.NET MVC的目的2
- asp.net-mvc – 如何在DB实体的子模型上使用自定
- asp.net – WebApi:将参数映射到标头值
热点阅读
