2012-09-13 138 views
0

我有一个视图,显示一些图像复选框,允许用户决定是否保存每个图像。我隐藏了复选框,而是使用图像顶部的复选标记或X来表示它是否被选中。这一切工作正常。但是,复选框的值不会更改 - 它始终保持未选中状态。MVC 3选择和取消选择使用jQuery的复选框

这里是我的视图代码:

<div class="imgCheckBoxes"> 
    <label for="MyImages_Cover" class="imgCheckBox"> 
     <img src="http://example.com/image.jpg" alt="cover" /> 
    </label> 
    @Html.CheckBoxFor(m => m.MyImages.Cover, new { @class = "check-box hideChkBx chkForImg" }) 
</div> 

这使得下面的HTML:

<div class="imgCheckBoxes"> 
    <label for="MyImages_Cover" class="imgCheckBox"> 
     <img src="http://example.com/image.jpg" alt="cover" /> 
    </label> 
    <input class="check-box hideChkBx chkForImg" id="MyImages_Cover" 
     name="MyImages.Cover" type="checkbox" value="true" /> 
    <input name="MyImages.Cover" type="hidden" value="false" /> 
</div> 

我的jQuery代码如下(删除了一些代码处理定位等):

var closeBtn = '../Content/img/close.png'; 
var okBtn = '../Content/img/ok.png'; 

$(document).ready(function (e) { 
    if ($('.imgCheckBox').html() != null && $('.imgCheckBox').html() != '') { 
     initializeOkCloseImg(); 
    } 
    $('.chkForImg').change(function (e) { 
     initializeOkCloseImg(); 
    }); 
}); 

function initializeOkCloseImg() { 
    var chkImg = ''; 
    $('.chkForImg').each(function (index, element) { 
     chkImg = closeBtn; 

     if ($(this).is(':checked')) { 
      chkImg = okBtn; 
     } 
    }); 
} 

一切工作正常在切换图像表示检查/ unc hecked,但是当表单发布时,复选框始终为false。我在这里错过了什么?

回答

0

好吧,我终于明白了这个问题。问题实际上不是用jQuery,而是用我的视图模型。显然这不起作用,因为我在我的视图模型(MyImages.Cover)中使用了一个模型。这出于某种原因把所有东西都扔掉了。当我在视图模型中使用标准布尔时,一切都很完美。我不知道这是为什么,但它有点糟糕,因为我需要在几页上重复使用这个逻辑,并且在每个视图模型中定义单独的属性似乎很乏味和不必要。希望有一个更简单的方法!

0

在你的post方法中,你是否返回带有更新值的模型(在这种情况下,复选框的值为MyImages.Cover)。

+0

在表单发布的控制器操作中,值被保存到数据库中,然后用户被重定向到GET操作,该操作将检索模型并将其返回给视图。我的控制器动作和一切工作正常,因为其他信息正在保存并正确显示,其jQuery似乎是问题。 – HTX9

相关问题