禁用强类型复选框未发布

时间:2011-07-07 00:28:20

标签: asp.net-mvc-2 c#-4.0

我想在asp.net mvc 2应用程序中发布禁用复选框的值? 帖子上的'test'值是假的,但应该是真的吗?

 public ActionResult Index()
    {
        MyModel model = new MyModel();
        model.flag = true;

        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MyModel model)
    {
        var test = model.flag;

        return View();
    }

 <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<jqscriptfileseperate.Models.MyModel>" %>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>
 Index</h2>
<% using (Html.BeginForm("Index", "Home"))
   {%>
<%: Html.ValidationSummary(true) %>
<fieldset>
    <legend>Fields</legend>
    <div class="editor-label">
        <%: Html.LabelFor(model => model.flag) %>
    </div>
    <div class="editor-field">
        <%--   <%: Html.TextBoxFor(model => model.flag) %>--%>
        <%:Html.CheckBoxFor(model => model.flag, new {disabled="disabled" })%>
    </div>
</fieldset>
<button type="submit">
    Save</button>
<% } %>
</asp:Content>


  public class MyModel
{
    public bool flag { get; set; }
}

3 个答案:

答案 0 :(得分:3)

根据spec,表单提交中会排除已禁用的输入。将其更改为readonly应该会产生所需的行为。

答案 1 :(得分:1)

我发现解决这个问题的最好方法是输入一个虚拟禁用复选框和一个绑定到模型的隐藏字段:

@Html.CheckBox("dummy", new {disabled = "disabled", Checked="true"})
@Html.HiddenFor(model => model.IsCollection)

这样,复选框显示为,并且值仍然会被回发。

答案 2 :(得分:0)

实际上这个效果更好

<input type="checkbox" onclick="return false" />