正确使用调用c#函数的引导开关(T4MVC/Entity Framework)
本文关键字:T4MVC 开关 Entity Framework 调用 函数 | 更新日期: 2023-09-27 18:21:45
如果没有代码,我找不到可以解释的单词,所以到目前为止我得到的是:
视图:(引导开关)
[...]
@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;
}
所以基本上,我想做的是在页面加载时,当我所有的"开关"都创建好时,我想去数据库中查看哪个开关必须是真或假,并将它们设置为正确的值。。。
但是当我尝试这样做时,当id=0时,我会得到一个NullReferenceException。我想这很正常,因为在我的数据库中,id是1、2、3和4。但是,如果我将id增加一,当id=4时,我会得到同样的错误。在任何情况下,它们都不会被切换为true(在DB中都是true)。如果我手动(没有.each),它只会工作(对于id1-2-3),id:0-4仍然无法完成我想要的操作。
可以用前臂吗?"因为我试着传递id"@(item.id+1)",但还是得到了一次0。。。
非常感谢您的帮助!
我至少看到三个问题:
- 您的输入id以数字开头。从技术上讲,id不应该以数字开头。尝试将其更改为
<input class="my-checkbox" type="checkbox" name="my-checkbox" id="@("chkBox" + item.Id)" data-handle-width="100" data-on-text="Activer" data-off-text="Désactiver" data-size="small" data-on-color="success">
- 你的主要问题应该是
$('.my-checkbox').prop('checked', result);
这将把class="my checkbox"的所有输入更改为ajax调用的最后一个结果。您可能想将其更改为
$('#chkBox' + index).prop('checked', result);
- 您将遇到性能问题,因为在这个实现中有太多的ajax调用