我发现了一个奇怪的场景,防止布尔?正确地发送回控制器。这是一个非常具体的问题,因此请按照重新创建的步骤操作。ASP.Net MVC3模型绑定错误
应用程序必须作为虚拟文件夹部署在IIS中,以便/ home/Test URL不是/ Virtual/Home/Test。
首页控制器:
[HttpGet]
public ActionResult Test(int? temp, bool? testBool)
{
return View(testBool);
}
/主页/测试视图(剃刀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中的错误?
如果这只是一个错误,有没有人知道什么是提交错误报告正确的ASP.Net MVC频道?
更新:
我发现,如果你有在动作参数的任何数量的可空变量,只有第一个将永远工作者和所有其他人将无法被填充。任何人都知道这是设计还是错误?
工作!优秀。按照说明在Global.asax.cs中只添加你说的那一行到Application_Start方法。开始担心没有人会得到这个答案。希望这个错误能够在未来的更新中由MVC团队解决。谢谢你的帮助。 – 2011-05-05 09:43:53
太棒了,@克里斯。很高兴为你工作。奇怪的是,它在当地调试时很有效,这让我想知道我的测试服务器上安装了什么版本......:) – Buildstarted 2011-05-05 14:24:20
也许你拥有比我更新的MVC3版本。我将不得不检查是否有更新的版本可用。你是否真的拥有像/ Virtual/Home/Test这样的虚拟目录?如果不正确的话,会有很多比特会导致它在我的帖子中详述的所有内容。 – 2011-05-05 14:26:22