我创建了一个帮助程序,我可以将DateTime对象传递给它,以及一个标识符(字符串)。然后它会输出三个显示DD |的选择MM | YYYY(或者说你古怪的美国人想要你约会的那种方式)。
我在每个选择名称的开头添加一个公共组件。
我想要的是在网站控制器父级的“OnActionExecuting”上设置过滤器以捕获所有表单帖子,浏览以“dateselector-”开头的任何字段添加三个(日/月/年)将字段转换为一个名为{identifier}的变量并将其传递给它。
是的,我正在尝试复制Rails助手(date_select)......
答案 0 :(得分:1)
ActionExecutingContext.Params可让您获取发布的值。
ActionExecutingContext.ActionParameters允许您设置参数
将传递给控制器动作。
修改强>
如果我没记错的话,CodeCampServer来源中有一些日期时间管理内容
可能值得一试。
<强> EDIT2:强>
是的,eu-ge-ne。我的错误,我仍然很困,在我的代码中没有注意到这一点:
var request = filterContext.Controller.ControllerContext.HttpContext.Request;
但我的意思是.Params,而不是.Form,因为Params也包含来自查询字符串的值 如果HTTP使用GET,则更方便。
答案 1 :(得分:1)
添加到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);