2012-09-13 238 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

相關問題