asp.net-mvc – HTTP GET中的MVC5 ViewModel绑定?

我有这样的动作

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

点赞