asp.net-mvc-3 – MVC如何忽略嵌套视图模型的验证
发布时间:2020-12-16 07:24:00 所属栏目:asp.Net 来源:网络整理
导读:我有一个页面,我将两个视图模型发布到控制器,查询和约会.约会在查询中嵌套.用户可以选择在不创建约会的情况下向我们提交查询. 我在视图模型属性上使用内置的MVC必需属性. 我的问题是,当用户选择在没有约会的情况下创建查询时,如何优雅地忽略嵌套的约会视图模
我有一个页面,我将两个视图模型发布到控制器,查询和约会.约会在查询中嵌套.用户可以选择在不创建约会的情况下向我们提交查询.
我在视图模型属性上使用内置的MVC必需属性. 我的问题是,当用户选择在没有约会的情况下创建查询时,如何优雅地忽略嵌套的约会视图模型上的验证器并让ModelState.IsValid返回true? if(!viewModel.CreateAppointment) { //ignore the nested view models validation } 解决方法
您可以创建一个自定义的IgnoreModelError属性,如下所示,并在视图中使用2个单独的按钮,一个用于查询,另一个用于约会.
// C# public class IgnoreModelErrorAttribute : ActionFilterAttribute { private string keysString; public IgnoreModelErrorsAttribute(string keys) : base() { this.keysString = keys; } public override void OnActionExecuting(ActionExecutingContext filterContext) { ModelStateDictionary modelState = filterContext.Controller.ViewData.ModelState; string[] keyPatterns = keysString.Split(new char[] { ',' },StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < keyPatterns.Length; i++) { string keyPattern = keyPatterns[i] .Trim() .Replace(@".",@".") .Replace(@"[",@"[") .Replace(@"]",@"]") .Replace(@"[]",@"[[0-9]+]") .Replace(@"*",@"[A-Za-z0-9]+"); IEnumerable<string> matchingKeys = _ modelState.Keys.Where(x => Regex.IsMatch(x,keyPattern)); foreach (string matchingKey in matchingKeys) modelState[matchingKey].Errors.Clear(); } } } [HttpPost] [IgnoreModelErrors("Enquiry.Appointment")] public ActionResult CreateEnquiryOnly(Enquiry enquiry) { // Code for enquiry only. } [HttpPost] public ActionResult CreateAppointment(Enquiry enquiry) { // Code for appointment. } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 微信--企业会话--示例
- 让我们的ASP.NET MVC应用可以单独维护验证消息
- WF4 – 在asp.net中显示工作流图像,并突出显示活动
- asp.net-mvc – HttpCache vs Singleton – MVC应用程序的最
- asp.net – IIS和线程
- IHttpAsyncHandler和ASP.NET“请求执行”计数器的问题
- asp.net-mvc – 如何在VS2012 MVC4项目中设置Ext.NET 2.0?
- 如何在ASP.NET 4.0应用程序的IIS管理器中添加用户?
- asp.net – 如何从另一个UserControl继承UserControl?
- asp.net-mvc – 如何使用Windsor将依赖项注入到ActionFilte