gpt4 book ai didi

asp.net-mvc - Asp .net mvc 3 CheckBoxFor方法输出隐藏字段,当复选框被禁用并选择 true 时,该隐藏字段值为 false

转载 作者:行者123 更新时间:2023-12-02 04:04:01 25 4
gpt4 key购买 nike

CheckBoxFor(t => t.boolValue, new {disabled="disabled"}) 方法在禁用模式下呈现复选框。

该方法还呈现一个隐藏字段。

我的问题是为什么这个隐藏字段的禁用复选框的值为假?我相信隐藏字段的目的是比默认复选框行为有一些额外的行为

有没有办法覆盖默认的 MVC 功能,以便此隐藏字段的值即使在禁用模式下也基于复选框的状态?

最佳答案

隐藏字段用于将复选框值绑定(bind)到 bool 属性。问题是,如果未选中复选框,则不会向服务器发送任何内容,因此 ASP.NET MVC 使用此隐藏字段发送 false 并绑定(bind)到相应的 bool 字段。除了编写自定义帮助程序之外,您无法修改此行为。

话虽这么说,但不要在复选框上使用 disabled="disabled",而是使用 readonly="readonly"。这样,您将保持相同的期望行为,即用户无法修改其值,但除此之外,在提交表单时其值将被发送到服务器:

@Html.CheckBoxFor(x => x.Something, new { @readonly = "readonly" })
<小时/>

更新:

正如评论部分所指出的,readonly 属性不适用于 Google Chrome。另一种可能性是使用另一个隐藏字段并禁用该复选框:

@Html.HiddenFor(x => x.Something)
@Html.CheckBoxFor(x => x.Something, new { disabled = "disabled" })
<小时/>

更新2:

这是带有附加隐藏字段的完整测试用例。

型号:

public class MyViewModel
{
public bool Foo { get; set; }
}

Controller :

public class HomeController : Controller
{
public ActionResult Index()
{
return View(new MyViewModel { Foo = true });
}

[HttpPost]
public ActionResult Index(MyViewModel model)
{
return Content(model.Foo.ToString());
}
}

查看:

@model MyViewModel

@using (Html.BeginForm())
{
@Html.HiddenFor(x => x.Foo)
@Html.CheckBoxFor(x => x.Foo, new { disabled = "disabled" })
<button type="submit">OK</button>
}

提交表单后,Foo 属性的值为 true。我已经对所有主要浏览器(Chrome、FF、IE)进行了测试。

关于asp.net-mvc - Asp .net mvc 3 CheckBoxFor方法输出隐藏字段,当复选框被禁用并选择 true 时,该隐藏字段值为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11011300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com