asp.net-mvc – DataAnnotation验证和自定义ModelBinder
发布时间:2020-12-16 00:16:33 所属栏目:asp.Net 来源:网络整理
导读:我一直在使用ASP.NET MVC2进行一些实验,并遇到了一个有趣的问题. 我想在MVC应用程序中定义将用作模型的对象周围的接口.另外,我想通过使用验证属性标记此接口的成员来在功能上利用新的DataAnnotation. 所以,如果我的网站有一个“Photo”对象,我将定义以下界面
我一直在使用ASP.NET MVC2进行一些实验,并遇到了一个有趣的问题.
我想在MVC应用程序中定义将用作模型的对象周围的接口.另外,我想通过使用验证属性标记此接口的成员来在功能上利用新的DataAnnotation. 所以,如果我的网站有一个“Photo”对象,我将定义以下界面: public interface IPhoto { [Required] string Name { get; set; } [Required] string Path { get; set; } } 我将定义以下实现: public class PhotoImpl : IPhoto { public string Name { get; set; } public string Path { get; set; } } 我的MVC App控制器可能包含以下方法: public class PhotoController : Controller { [HttpGet] public ActionResult CreatePhoto() { return View(); } [HttpPost] public ActionResult CreatePhoto(IPhoto photo) { if(ModelState.IsValid) { return View(); } else { return View(photo); } } } 最后,为了将PhotoImpls绑定到这些操作方法中的参数,我可能会对DefaultModelBinder实现以下扩展: public class PhotoModelBinder : DefaultModelBinder { public override object BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext) { if(bindingContext.ModelType == typeof(IPhoto)) { IPhoto photo = new PhotoImpl(); // snip: set properties of photo to bound values return photo; } return base.BindModel(controllerContext,bindingContext); } } 除了我的控制器中的ModelState.IsValid属性似乎没有注意到IPhoto实现的[Required]属性中的无效值(例如,null)之外,所有内容似乎都运行良好. 我怀疑我忽略了在我的ModelBinder实现中设置一些重要的状态.任何提示? 解决方法
我遇到过同样的问题.答案是在您的自定义模型绑定器中覆盖BindModel(),而不是重写CreateModel()…
protected override object CreateModel(ControllerContext controllerContext,ModelBindingContext bindingContext,System.Type modelType) { if (modelType == typeof(IPhoto)) { IPhoto photo = new PhotoImpl(); // snip: set properties of photo to bound values return photo; } return base.CreateModel(controllerContext,bindingContext,modelType); } 然后你可以让基础BindModel类通过验证来完成它的东西:-) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-core – 用于ASP.NET 5的Web服务器,无需调试活动即
- asp.net – Azure网站上HTTP 1.0代理请求的gzip压缩
- asp.net-mvc – 具有嵌套视图模型和Knockout的ASP.NET MVC
- asp.net-mvc – 存储库与DAL中的服务模式:EF和Dapper
- asp.net-mvc – ASP.NET MVC:ValidationAttribute和本地化
- asp.net-mvc – 在ajax调用中ASP.NET MVC错误的url
- asp.net-mvc – 单声道或Windows上的主机ServiceStack,MVC3
- asp.net mvc jquery ui datepicker绑定问题
- entity-framework – 序列化时如何忽略导航属性
- asp.net – 如何创建一个HTML Helper来扩展TextBoxFor()以添
推荐文章
站长推荐
热点阅读