asp.net-mvc – DataAnnotation验证和自定义ModelBinder
发布时间:2020-05-23 20:15:26 所属栏目: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 – 是否有可能过滤SignalR中的接收器?
- asp.net-mvc – 如何在Web表单和MVC2应用程序之间共享基于.
- asp.net:部分类和继承
- asp.net-mvc – 在ASP.NET MVC中从相同的路由URL路径提供图
- asp.net-mvc-3 – 如何从部分视图将JavaScript渲染到Master
- ASP.NET表单中的Paypal表单
- 问题在ASP.NET中使用System.Web.Caching.Cache类
- 从asp.net ListBox中获取所有选定的项目
- asp.net – 如何通过web.config文件中的Access-Control-All
- asp.net-mvc – ASP MVC 3在不同的视图中使用不同的布局
推荐文章
站长推荐
- asp.net-mvc – 使用Ajax.Beginform的RedirectTo
- asp.net – 如何将所有httpErrors重定向到自定义
- asp.net – 我需要将.compiled文件复制到生产服务
- ASP.NET相对路径
- asp.net-mvc – 如何将ViewData传递给HandleErro
- 为什么每个人都在ASP.NET Webforms中依赖注入是困
- asp.net – 可以通过VS2015在IIS中调试/运行aspn
- asp.net – 访问视图Mvc.net中的路由值
- asp.net-mvc – 带vNext的MVC 6:我们还需要Glob
- ASP.NET Web Api HttpResponseException 400(错误
热点阅读
