Sha*_*eet 10 asp.net-mvc checkboxfor
CheckBoxFor(t => t.boolValue,new {disabled ="disabled"})方法在禁用模式下呈现复选框.
该方法也呈现隐藏字段.
我的问题是为什么这个隐藏字段对于禁用复选框有错误值?我相信隐藏字段的目的是在默认的复选框行为上有一些额外的行为
有没有办法覆盖默认的MVC功能,以便即使在禁用模式下,此隐藏字段的值也基于复选框的状态?
Dar*_*rov 14
隐藏字段用于将复选框值绑定到布尔属性.问题是如果未选中复选框,则不会向服务器发送任何内容,因此ASP.NET MVC使用此隐藏字段发送false并绑定到相应的布尔字段.除了编写自定义帮助程序之外,您无法修改此行为.
这就是说,而不是使用复选框上的disabled="disabled"使用readonly="readonly".这样,您将保持用户无法修改其值所需的相同行为,但除此之外,在提交表单时,其值将发送到服务器:
@Html.CheckBoxFor(x => x.Something, new { @readonly = "readonly" })
Run Code Online (Sandbox Code Playgroud)
更新:
正如评论部分所述,该readonly属性不适用于Google Chrome.另一种可能性是使用另一个隐藏字段并禁用该复选框:
@Html.HiddenFor(x => x.Something)
@Html.CheckBoxFor(x => x.Something, new { disabled = "disabled" })
Run Code Online (Sandbox Code Playgroud)
更新2:
这是一个带有额外隐藏字段的完整测试用例.
模型:
public class MyViewModel
{
public bool Foo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new MyViewModel { Foo = true });
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
return Content(model.Foo.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
视图:
@model MyViewModel
@using (Html.BeginForm())
{
@Html.HiddenFor(x => x.Foo)
@Html.CheckBoxFor(x => x.Foo, new { disabled = "disabled" })
<button type="submit">OK</button>
}
Run Code Online (Sandbox Code Playgroud)
提交表单时,Foo属性的值为true.我已经测试过所有主流浏览器(Chrome,FF,IE).
| 归档时间: |
|
| 查看次数: |
16337 次 |
| 最近记录: |