ASP.Net MVC3模型绑定错误
我发现了一个可以阻止bool的奇怪场景? 正确地发送回控制器。 这是一个非常具体的问题,因此请按照重新创建的步骤操作。
该应用程序必须作为虚拟文件夹部署在IIS中,以便/ Home / Test URL不是/ Virtual / Home / Test。
主控制器:
[HttpGet]
public ActionResult Test(int? temp, bool? testBool)
{
return View(testBool);
}
/ Home / Test View(Razor cshtml):
@model bool?
@{
ViewBag.Title = "Test";
}
@using (Html.BeginForm("Test", "Home", FormMethod.Get))
{
@Html.CheckBox("testBool", Model ?? false, new { onchange = "this.form.submit();" })
@Html.Label(Model == true ? "True" : "False")
}
在回发布尔? 由于int而不会使其成为控制器? 之前它在参数列表中。 这可以通过把布尔解决? 在int之前? 在参数列表中,但显然你不应该这样做。 如果不在IIS上的虚拟文件夹中,它也可以正常工作。 如果使用POST方法也存在同样的问题,但是发布的是bool而不是bool? 可以工作,但如果不在虚拟文件夹中则不需要,所以不必这样做。
有没有其他人经历过这一点,有什么解释为什么绑定失败或者它只是一个MVC3中的错误?
如果它只是一个bug,有没有人知道什么是提交错误报告的正确的ASP.Net MVC频道?
更新:
我发现,如果在动作参数中有任意数量的可为空的变量,则只有第一个可以工作,而其他所有其他变量将不能被填充。 任何人都知道这是设计还是错误?
显然这仍然是一个问题。 以为它现在已经被修复了。 解决这个问题的一个方法是将其添加到Application_Start
方法中。
ModelMetadataProviders.Current = new DataAnnotationsModelMetadataProvider();
添加这将允许可为空的参数适当地行为。 我很惊讶这个错误仍然存在,因为它在12月被称为RC2。
文章中的路由可选参数之间的区别在于,在您的示例中,路由不是问题。 在这种情况下,您正在发布(或查询字符串)数据,并且不会正确填充可空行为参数。 我已经检查过mvc3源代码,并且不明白为什么这应该是一个问题,因为它调试它似乎正常工作,并通过源结果以预期的行为步进。 我相当肯定,尽管Scott Guthrie说现在应该是这样,但这个问题还没有解决。
这篇文章可能对你有用。
链接地址: http://www.djcxy.com/p/52065.html