javascript - Jquery UI、Razor 和 MVC : Uncaught TypeError: Illegal invocation

标签 javascript razor asp.net-mvc-5 jquery-ui-dialog

尝试获取 Jquery UI 对话框来确认(确定、取消)对删除操作 (DeleteTestUser) 的调用。我的 jquery ui 对话框将在单击时出现。取消按钮按预期工作,但“确定”按钮却不然。

当我单击“确定”时,Chrome 在控制台中显示错误(未捕获的类型错误:非法调用)。这可能并不奇怪,因为它不知道 testUser.TestUserId 是什么...

我最终如何将该值从客户端传递到服务器?否则,从 HomeController.cs 进行的删除操作无需确认对话框即可正常工作。我需要先确定才能打电话。我觉得我已经很接近了,但不知道如何在 Javascript 中形成 Url.Action 帖子。

我很确定有问题的行是 _layout.cshtml 中的帖子

_layout.cshtml

    <script type="text/javascript">
    $(document).ready(function() {

        $('#dialog-modal').dialog(
            {
                title: 'Test User',
                draggable: false,
                resizeable: false,
                closeOnEscape: true,
                modal: true,
                autoOpen: false,
                buttons: {
                    'Cancel': function() {
                        $(this).dialog('close');
                    },
                    'OK': function() {
                        $.post("@Url.Action("DeleteTestUser", "Home")",
                            { id: $('testUser.TestUserId') });
                        $(this).dialog('close');
                    }

                }
            });

        $('#confirm-delete').click(function () {
            $('#dialog-modal').dialog("open");
        });
    });
</script>

HomeController.cs

    public ActionResult DeleteTestUser(int id)
    {
        this.testUserBusinessLogic.DeleteTestUser(id);
        return this.RedirectToAction("Index");
    }

index.cshtml

    @foreach (var testUser in this.Model)
    {
        <tr>
            <td>@testUser.FirstName</td>
            <td>@testUser.LastName</td>
            <td>@testUser.EmailAddress</td>
            <td>
                <a href="@Url.Action("TestUser", "Home",
                        new {id = testUser.TestUserId})">
                    <i class="fa fa-pencil fa-lg text-primary"></i>
                </a>
            </td>
            <td>
                <a href="#" id="confirm-delete" >
                    <i class="fa fa-trash fa-lg text-primary"></i>
                </a>
            </td>
        </tr>
    }

最佳答案

更改生成链接的代码,以删除重复的 id 属性(改为使用类名)并添加 data- 属性来存储 TestUserId 的值

<td>
    <a href="#" class="confirm-delete" data-id="@testUser.TestUserId">
        <i class="fa fa-trash fa-lg text-primary"></i>
    </a>
</td>

在脚本中,您可以在调用 open 之前检索该值并将其分配给对话框的 data- 属性

$('.confirm-delete').click(function () { // modify selector
    var id = $(this).data('id');
    $('#dialog-modal').data('id', id).dialog("open");
});

并在单击“确定”按钮时检索它

$('#dialog-modal').dialog(
    ....
    buttons: {
        'Cancel': function() {
            $(this).dialog('close');
        },
        'OK': function() {
            $.post('@Url.Action("DeleteTestUser", "Home")', { id: $('#dialog-modal').data('id') });
            $(this).dialog('close');
        }
    }
});

关于javascript - Jquery UI、Razor 和 MVC : Uncaught TypeError: Illegal invocation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49376046/

相关文章:

JavaScript 添加换行符,\n 不起作用

javascript - 组件有 Render 方法,但没有扩展 React.Component

javascript - 在 ASP.NET MVC View 中切换 aria-pressed=true/false 引发错误

asp.net-mvc - ASP.NET MVC `Html.ActionLink` 之间 "Areas"

asp.net-web-api - 为 Web Api 2 和 OWIN token 身份验证启用 CORS

c# - 即使声明中存在角色,IsInRole 也会返回 false

javascript - 消除图像加载时间

c# - NancyFx - Razor 编译错误

asp.net-mvc - MVC项目架构支持模块

html - css 位置固定在区域内的某个位置