C# 为什么.NETMVC4从GET查询字符串而不是模型绑定器中获取值

C# 为什么.NETMVC4从GET查询字符串而不是模型绑定器中获取值,c#,asp.net-mvc,asp.net-mvc-4,razor,C#,Asp.net Mvc,Asp.net Mvc 4,Razor,我有以下.cshtml代码: @Html.TextBoxFor(x => x.BeginDate, "{0:dd.MM.yyyy}", new { @class = "datefield" }) @Html.TextBoxFor(x => x.EndDate, "{0:dd.MM.yyyy}", new { @class = "datefield" }) 通过使用POST,显示的值是正确的(也是因为我使用的是模型活页夹) 但是,如果我使用GET(我使用的是PagedList.Mvc

我有以下.cshtml代码:

@Html.TextBoxFor(x => x.BeginDate, "{0:dd.MM.yyyy}", new { @class = "datefield" })
@Html.TextBoxFor(x => x.EndDate, "{0:dd.MM.yyyy}", new { @class = "datefield" })
通过使用POST,显示的值是正确的(也是因为我使用的是模型活页夹)

但是,如果我使用GET(我使用的是PagedList.Mvc),并创建以下查询:
Index?page=3&beginDate=2015-07-01&endDate=2015-07-06
,以下值将显示在文本框中:2015-07-01和2015-07-06,而不是2015年7月1日和2015年7月6日

但如果我将参数名称更改为
Index?page=3&iBeginDate=2015-07-01&iEndDate=2015-07-06
,则这些值将正确显示在文本框中(01.07.2015和06.07.2015)

我的GET和POST方法的标题如下:

[HttpGet]
public ActionResult Index(int page = 1, int? workCenterId = null, DateTime? beginDate = null, DateTime? endDate = null, int? shiftId = null)
{
    var model = GetModel(page: page, workCenterId: workCenterId, beginDate: beginDate, endDate: endDate, shiftId: shiftId);
    return View(model);
}

[HttpPost]
public ActionResult Index([ModelBinder(typeof(ReportModelBinder))]ReportModel model)
{
     var newModel = GetModel(model);
     return View(newModel);
}

为什么MVC更喜欢GET参数而不是通过模型发送的参数?

没有偏好,调用的操作基于请求方法(GET/POST等)和操作名称,默认模型绑定器将使用值提供程序获取参数和模型属性的值,这些值将来自查询字符串、表单值、cookie、路由数据等。

这是出于设计。唯一的方法是确保GET参数与表单(POST)参数不冲突。因此,没有方法重写此?否。据我所知不是这样。如果“model”是相同的,“returnview(model);”应该在两个动作中返回完全相同的结果。。。您的模型BeginDate属性是什么类型的?字符串还是日期?如果是字符串,可能是不同的编码。它的日期时间数据类型。你有任何文档,我可以阅读有关这方面的?我真的可以举一些例子。