无法使用 jquery 将布尔值设置为数据属性

Can't set bollean value to data attribute with jquery

我有一个带有数据属性的按钮:

<button id="manageEditContract" type="button" class="btn btn-default" data-is-allow-to-edit="@(Model.Contract.IsAllowToEdit)">
       @(Model.Contract.IsAllowToEdit ? "Block" : "Unblock") 
</button>

当用户单击时,我希望按钮更改其属性。作为我的操作方法 returns JSON 具有两个属性 "IsOk" 和 "IsAllowToEdit" 的对象,我写了这个函数:

$('#manageEditContract').on('click', function () {
    var isAllowToEdit = $(this).data('isAllowToEdit');

    $.ajax({
        url: '@Url.Action("ChangeEditOption")',
        type: 'POST',
        data: { isAllowToEdit: isAllowToEdit },
        success: function (data) {
            if (data.IsOk) {
                $('#manageEditContract').data('isAllowToEdit', JSON.stringify(data.IsAllowToEdit));
            }
        }
    });
});

但是没有变。

我试过 JSON.stringify 没有它但没有成功。

已更新: 正如答案所建议的那样,我应该使用 "attr" 将值设置为特定属性。但我也意识到,当我获取数据属性的值时,我不应该使用 "data",因为它一直都是一样的。看起来 "data" 属性缓存了数据。 所以,而不是

var isAllowToEdit = $(this).data('isAllowToEdit');

我应该使用:

var isAllowToEdit = $(this).attr('data-isAllowToEdit');

另外 JSON.stringify 在我的情况下没有必要使用。

$('#manageEditContract').attr('data-is-allow-to-edit', JSON.stringify(data.IsAllowToEdit));

应该可行

您可以使用 .attr。这样你就不需要使用 JSON.stringify.

var boolValue = true;
$('#manageEditContract').attr('data-is-allow-to-edit', boolValue );

看看它是如何工作的。

var boolValue = true;
$('#manageEditContract').attr('data-is-allow-to-edit', boolValue)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<div id="manageEditContract" data-is-allow-to-edit="false">inspect me</div>