正确使用调用C#函数的引导程序开关(T4MVC / Entity Framework) - javascript

没有代码,我找不到可以解释的单词,所以这是我到目前为止得到的:

查看:(引导开关)

[...]
    @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。但是如果我将其加1, id,当id = 4时,我得到相同的错误。在每种情况下,它们都没有切换为true(在数据库中都为true)。如果我手动执行此操作(对于ID 1-2-3),则只能工作(没有.each),ID:0-4仍然无法执行我想要的操作。

可能与foreach有关?因为我尝试传递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调用

scrollIntoView和焦点问题 - javascript

var mediaIdForFocus = '<?php echo $this->mediaIdForFocus; ?>'; if(mediaIdForFocus) $('#flagimg'+mediaIdForFocus).get(0).scrollIntoView().addClass("…

Entity Framework DbEntityEntry>'不包含Where的定义 - c#

此代码狙击手来自Adding CreatedDate to an entity using Entity Framework 5 Code First public override int SaveChanges() { DateTime saveTime = DateTime.Now; foreach (var entry in this.ChangeT…

Visual Studio,ASP.Net(.Net Framework),并在项目中包含NuGet安装的软件包 - javascript

我在Visual Studio 2017中有一个主要由JavaScript组成的ASP.Net(.Net Framework)MVC Web应用程序。我已经使用NuGet安装了一个软件包(特别是marker-animate-unobtrusive软件包。)文档继续说我应该在我的HTML页面中包含JavaScript,但是在仔细检查了NuGet的内容后,我不确…

javascript popupwindow之后的行如何工作? - javascript

好的,我有一个来自后面代码的方法,可以创建一个popupwindow。然后有一行代码要在那之后执行,我想知道那行代码何时执行,是在使用popupwindow之后执行还是在创建popupwindow之后执行?例如:void exPopupWindowMethod() { string scr = "window.open('exampleP…

Javascript-Urls的奇怪字符串比较行为 - javascript

最近,在编写我无法理解的javascript时遇到了字符串比较的问题。我从完全相同的网址创建了两个字符串,当我比较它们时返回false,但是在重新分配相同的字符串后,比较返回true。这是我的示例:var str1 = "http://google.com/"; var str2 = "http://google.com‏/&#…