我有这样的行动
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>
}
这样的概览动作的视图
@model OverviewVM
@Html.EditorFor(model => model.TimeAxis)
当我执行GET请求时,查询字符串是TimeAxis.From = 22. + 02. + 2014&amp; TimeAxis.To = 25. + 02. + 2014但是一次在动作TimeAxis.From和TimeAxis.To都是空的。
如果我将表单方法更改为POST,它会立即按预期工作。从设计的角度来看,这应该是/必须是GET请求。
如何让模型绑定为GET工作?
更新:
将操作更改为
public ActionResult Overview(DateTime? From = null, DateTime? To = null)
以这种形式发送请求:... / Overview /?From = 22. + 02. + 2014&amp; To = 25. + 02. + 2014也适用。
但是我想将它封装在类中并且不需要更改输入字段名称 - EditorFor将它们生成为TimeAxis.From和TimeAxis.To。我可能会向ViewModel / form添加其他属性。
答案 0 :(得分:2)
我找到了答案。 HTTP GET请求是文化不变的,而HTTP POST请求则遵循ASP.NET MVC中的当前文化。
http://weblogs.asp.net/melvynharbour/archive/2008/11/21/mvc-modelbinder-and-localization.aspx
答案 1 :(得分:0)
如果要再次将Model带入视图,则需要将ModelView传递回View
return View(TimeAxis);
然后,我认为你没有一个名为Controller
的控制器吗?您可能有HomeController
或其他内容,没有?
在这种情况下,请将您的表格修改为
@using (Html.BeginForm("Overview", "Home", FormMethod.Get))
例如,Overview
控件
Home
操作是public ActionResult Overview(TimeAxisVM TimeAxis)
{
return View(TimeAxis);
}
总而言之,您的控制器和视图应该是:
@using (Html.BeginForm("Overview", "Home", FormMethod.Get))
{
@Html.EditorFor(Model => Model.From)
@Html.EditorFor(Model => Model.To)
<button type="submit">Submit</button>
}
和
{{1}}
这是上面代码的截屏视频:http://screencast.com/t/7G6ofEq0vZEo