CheckBoxFor,当我重新加载页面时,我可以检查已经选中的复选框

时间:2017-10-16 10:10:20

标签: c# asp.net-mvc

我有一个奇怪的问题,我选中了一个复选框,然后如果我返回相同的视图,那么我的选中复选框仍会被选中。但如果我取消选中它们,它会再次检查 。然后,行为恢复正常,我可以取消选中它们并重新检查它们等等。但这意味着我必须在页面刷新后双击以取消选中已经选中的复选框。

我已经通过chrome调试器和我的控制器检查了在第一次单击复选框之前和之后对它们进行了实际检查。

 <td>
    <div class="btn-group" data-toggle="buttons">
        <label class="btn btn-primary checkboxes">
           <span class="glyphicon glyphicon-unchecked large-glyphicon"></span>
           - @Html.CheckBoxFor(m => m.Equipment[i].Checked, new {@class= "assetCheckBox" })

             @Model.Equipment[i].AsssetNumber
        </label>
   </div>
</td>

我的模型有一个设备对象列表,它们都有字段

   public bool Checked { get; set; }

我的控制器

    public ActionResult UpdatStatus(EquipmentSearch search)
    {
        _repository.Search = search;
        var userActionResult = Services.EsignSecurity.Esign(search.Username, search.Password, _repository.SaveEquipmentChanges);

        ShowResultInModal(userActionResult.Success, userActionResult.ReturnMessage);


        return View("Index", GetMatchingEquipment(search.SearchType, search.SearchInput));

    }

我的剧本:

$(document).ready(function () {
BindPageLoadEvents();
});


function BindPageLoadEvents() {
$(function() {
    $(".assetCheckBox").change(function() {

        if ($(this).prop("checked")) {
            activateEsign($(this).parent());
            $(this).prev().addClass("glyphicon-ok-circle");
            $(this).prev().removeClass("glyphicon-unchecked");
        } else {
            deactivateEsign($(this).parent());
            $(this).prev().removeClass("glyphicon-ok-circle");
            $(this).prev().addClass("glyphicon-unchecked");
        }
    });
});
}


function ifNothingCheckedDisableEsignActions() {
// ReSharper disable once CssBrowserCompatibility
if ($("#tblEquipment input:checkbox:checked").length > 0) {
    $("#pnlEsignActions").find("*").removeAttr("disabled");
} else {
    $("#pnlEsignActions").find("*").attr("disabled", true);
}
}
function activateEsign(element) {
    $(element).removeClass("btn-primary");
    $(element).addClass("btn-warning");
}

function deactivateEsign(element) {
    $(element).removeClass("btn-warning");
    $(element).addClass("btn-primary");
}

编辑:我添加了更多嵌入复选框的代码,因为我认为这可能导致问题。非常感谢任何的想法。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。我不得不重新应用当前的#34;活跃的&#34;自举按钮的状态。

 <div class="btn-group" data-toggle="buttons">
       <label class="btn btn-primary checkboxes">
        <span class="glyphicon glyphicon-unchecked large-glyphicon"></span>
            - @Html.CheckBoxFor(m => m.Equipment[i].Checked, new {@class= "assetCheckBox" })
       </label>
 </div>

并在页面加载

$(function () {
$('.checkboxes').each(function () {
    var checkbox = $(this).children('input[type=checkbox]');
    if (checkbox.is(':checked')) {
        checkbox.parent().addClass("active");
    } else {    
        checkbox.parent().removeClass("active");
}

}); });

没有人能够帮助我的原因是我的问题中没有包含足够的代码。