我有这样的动作
public ActionResult Overview(TimeAxisVM TimeAxis = null)
{
return View(new OverviewVM());
}
查看这样的模型
public class TimeAxisVM
{
// omitted ctor
[DataType(DataType.DateTime)]
public DateTime? From { get; set; }
[DataType(DataType.DateTime)]
public DateTime? To { get; set; }
}
视图模型的编辑器模板
@model TimeAxisVM
@using (Html.BeginForm("Overview", "Controller", FormMethod.Get))
{
@Html.EditorFor(model => model.From)
@Html.EditorFor(model => model.To)
<button type="submit">Submit</button>
}
并且像这样的Overview操作的视图
@model OverviewVM
@Html.EditorFor(model => model.TimeAxis)
当我执行GET请求时,查询字符串是TimeAxis.From = 22. 02. 2014& TimeAxis.To = 25. 02. 2014年,但一旦在行动中TimeAxis.From和TimeAxis.To都为空.
如果我将form方法更改为POST,它会立即按预期工作.从设计的角度来看,这应该是/必须是GET请求.
任何想法如何使模型绑定为GET工作?
更新:
将动作更改为
public ActionResult Overview(DateTime? From = null, DateTime? To = null)
并以这种形式发送请求:… / Overview /?From = 22. 02. 2014& To = 25. 02. 2014年也有效.
但我想将它封装在类中,不需要更改输入字段名称 – EditorFor将它们生成为TimeAxis.From和TimeAxis.To.我可能会向ViewModel /表单添加其他属性.
最佳答案 我找到了答案. HTTP GET请求是文化不变的,而HTTP POST请求则尊重ASP.NET MVC中的当前文化.
http://weblogs.asp.net/melvynharbour/archive/2008/11/21/mvc-modelbinder-and-localization.aspx