C# ASP.NET MVC OnAction执行筛选器以捕获特定表单字段并合并
我已经创建了一个助手,可以向其传递DateTime对象和标识符(字符串)。然后,它将输出三个选项,显示DD | MM | YYYY(或者你们这些古怪的美国人希望你们约会的任何方式) 我将在每个select名称的开头添加一个公共组件C# ASP.NET MVC OnAction执行筛选器以捕获特定表单字段并合并,c#,asp.net-mvc,C#,Asp.net Mvc,我已经创建了一个助手,可以向其传递DateTime对象和标识符(字符串)。然后,它将输出三个选项,显示DD | MM | YYYY(或者你们这些古怪的美国人希望你们约会的任何方式) 我将在每个select名称的开头添加一个公共组件 日期选择器日期-{identifier} 日期选择器月份-{identifier} 日期选择器年份-{identifier} 我想要的是,在站点控制器父级的“OnActionExecuting”上设置一个过滤器,以捕获所有表单帖子,浏览以“dateselector
- 日期选择器日期-{identifier}
- 日期选择器月份-{identifier}
- 日期选择器年份-{identifier}
这将传递给控制器操作 编辑:
如果我没记错的话,source中有一些datetime管理内容。
可能值得一查 EDIT2:
是的,欧根。我的错误是,我仍然有点困,在代码中没有注意到这一点:
var request = filterContext.Controller.ControllerContext.HttpContext.Request;
但我的意思是.Params,而不是.Form,因为Params也包括来自查询字符串的值。如果HTTP使用GET更方便。只需添加到Arnis的anwer;)在您的过滤器中使用类似以下内容:
var Params = filterContext.RequestContext.HttpContext.Request.Params;
var dateParts = Params.AllKeys
.Where(x => x.StartsWith("dateselector-"))
.Select(x => new {
Id = x.Substring(x.LastIndexOf('-') + 1),
Part = x.Remove(x.LastIndexOf('-')).Substring(x.IndexOf('-') + 1),
Value = Params[x]
}).GroupBy(x => x.Id)
.ToDictionary(
x => x.Key,
x => x.ToDictionary(y => y.Part, y => y.Value)
);
var date = String.Format(
"{0}-{1}-{2}",
dateParts["identifier"]["year"],
dateParts["identifier"]["month"],
dateParts["identifier"]["day"]
);
// UPDATED after comment
// Params.Add("identifier", date);
// You can use HttpContext.Items instead:
filterContext.HttpContext.Items.Add("identifier", date);
Arnis,
ActionExecutingContext
没有Params
属性。你的意思是ActionExecutingContext.RequestContext.HttpContext.Request.Form
?似乎不是,最后不得不在表单中使用JQuery,因为截止日期迫在眉睫。。。