我使用Html.Checkbox
扩展方法创建的复选框存在这个恼人的问题。显然,在回发的情况下不会保存复选框的状态(由于表单验证错误)。深入研究MVC代码本身(System.Web.Mvc.Html.InputExtensions
)我发现'checked'属性是通过调用htmlHelper.EvalBoolean(name)
来确定的。
此方法查找ViewData本身的键(在name参数中指定)。问题是复选框的值实际上位于ModelState中。调用
htmlHelper.GetModelStateValue(name, typeof(bool))
将返回预期结果。
这是复选框实施中的一个缺陷吗?
答案 0 :(得分:1)
此问题发布在codeplex上,将在MVC RTM中修复/支持。与此同时,这是一个不错的workaround。
答案 1 :(得分:1)
我在这里发布了另一个工作区:
答案 2 :(得分:0)
请记住,MVC背后的思想是让网络恢复到几年前的状态。如果不使用像AJAX这样的东西,你不应该在页面上有回发。因此,您用于维护自己状态的大多数控件将不再使用。
您是否考虑过使用AJAX来尝试解决此问题?这样你可以拥有postbakc并保持控件的状态吗?