我无法用言语来无码解释,所以这里就是我有这么远:正确使用的调用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获取真/假。 –