C# ASP.NET MVC OnAction执行筛选器以捕获特定表单字段并合并

C# ASP.NET MVC OnAction执行筛选器以捕获特定表单字段并合并,c#,asp.net-mvc,C#,Asp.net Mvc,我已经创建了一个助手,可以向其传递DateTime对象和标识符(字符串)。然后,它将输出三个选项,显示DD | MM | YYYY(或者你们这些古怪的美国人希望你们约会的任何方式) 我将在每个select名称的开头添加一个公共组件 日期选择器日期-{identifier} 日期选择器月份-{identifier} 日期选择器年份-{identifier} 我想要的是,在站点控制器父级的“OnActionExecuting”上设置一个过滤器,以捕获所有表单帖子,浏览以“dateselector

我已经创建了一个助手,可以向其传递DateTime对象和标识符(字符串)。然后,它将输出三个选项,显示DD | MM | YYYY(或者你们这些古怪的美国人希望你们约会的任何方式)

我将在每个select名称的开头添加一个公共组件

  • 日期选择器日期-{identifier}
  • 日期选择器月份-{identifier}
  • 日期选择器年份-{identifier}
我想要的是,在站点控制器父级的“OnActionExecuting”上设置一个过滤器,以捕获所有表单帖子,浏览以“dateselector”开头的任何字段—“将三个(日/月/年)字段添加到一个名为{identifier}的变量中并传递它。”

是的,我正在尝试复制Rails助手(日期选择).

创建一个

参数允许您获取发布的值

ActionExecutingContext.ActionParameters用于设置参数
这将传递给控制器操作

编辑:
如果我没记错的话,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,因为截止日期迫在眉睫。。。