我無法用言語來無碼解釋,所以這裏就是我有這麼遠:正確使用的調用C#函數(T4MVC /實體框架)自舉開關
查看:(引導開關)
[...]
@foreach (var item in Model)
{
<tr>
<td>
<input class="my-checkbox" type="checkbox" name="my-checkbox" id="@(item.Id)" data-handle-width="100" data-on-text="Activer" data-off-text="Désactiver" data-size="small" data-on-color="success">
</td>
</tr>
}
[...]
<script type="text/javascript">
var isEnableUrl = '@Url.Action("IsEnabledMaterial", "MaterialType")';
$("[name='my-checkbox']").bootstrapSwitch();
</script>
的Javascript:
$(document).ready(function() {
$('.my-checkbox').each(function (index) {
$.ajax({
type: 'POST',
url: isEnableUrl,
data: { 'id': index },
success: function (result) {
$('.my-checkbox').prop('checked', result);
},
error: function (e) {
swal("Error", "Can't modify that element. ", "error");
}
});
});
});
然後我的控制器:
[HttpPost]
public virtual bool IsEnabledMaterial(int id)
{
var materialType = materialTypeRepository.GetById(id);
return materialType.Enable;
}
所以基本上,我想要做的是在頁面的負載上,當我所有的「開關」被創建時,我想去看看我的數據庫,看看哪個開關必須是真或假,將它們設置爲正確的值...
但是,當我試圖做到這一點時,我得到一個NullReferenceException當ID = 0。這是正常的,我猜,因爲在我的數據庫中,ID是1, 2,3和4.但是,如果我增加一個id,當id = 4時,我會得到相同的錯誤。在每種情況下,它們都不會切換爲true(它們在數據庫中都是真實的)。它只會工作(對於IDS 1-2-3),如果我手動(無.each),ID:0-4仍然沒有做到我想要的。
它可能與foreach?因爲我試圖通過ID「@(item.Id + 1)」,仍然得到0一次...
非常感謝您的幫助!
太多的Ajax調用如果你做這種方式你將會遇到性能問題。你在foreach中有多個ajax調用。不要這樣做,你可以在foreach循環中構造一個字典類型對象,然後將它發佈一次到你的控制器,併爲每個id獲取真/假。 –