0

我有一个控制器:

using System;
using System.Collections.Generic;
using System.Web.Mvc;
using MvcApplication5.Models;

namespace MvcApplication5.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            var car = new Car { Sold = true };

            return View(car);
        }

        [HttpPost]
        public ActionResult Index(Car car)
        {

            return View(car);
        }

        public ActionResult About()
        {
            return View();
        }
    }
}

模型:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MvcApplication5.Models
{
    public class Car
    {

        public bool Sold { get; set; }
    }
}

这是视图:

    @model MvcApplication5.Models.Car

@using (Html.BeginForm())
{
    @Html.CheckBoxFor(m => m.Sold, new  { @class = "sold" })
    @Html.HiddenFor(m => m.Sold)

    <div class="disable">Disable</div>
    <button type="submit" value="Submit">Submit</button>
}

<script type="text/javascript">
    $(function () {
        $('.disable').click(function () {
            $('.sold').attr("disabled", "disabled");
        });
    })
</script>

所以我在这里想要实现的是你进来并选中复选框。如果您单击提交,则该值将被很好地回发。但是,如果您单击禁用该复选框将被禁用。然后单击提交。我期待,因为该复选框仍处于选中状态,并且我添加了一个隐藏字段,返回的已售值将是真实的。这就是我添加隐藏字段的全部意义所在。

谁能告诉我为什么当有一个隐藏字段应该保持该值时,复选框在选中但禁用时为 Sold 发回 false ?

4

1 回答 1

2

disabled=disabled 不发送值,您想要保留该值以禁用它被更新的是 readonly=readonly。IE

$('.sold').attr("readonly", "readonly");

您还需要应用一些 CSS 使其看起来被禁用。

于 2012-08-23T22:34:04.717 回答