【问题标题】:mvc modal delete button not firing using jquerymvc模式删除按钮未使用jquery触发
【发布时间】:2015-09-27 04:22:16
【问题描述】:

我有一个用于删除记录的 partialView。我创建了一个按钮来处理删除,但我似乎无法获得触发 jquery 的按钮。

如果我将函数“deleteRecord”添加到按钮,jquery 将触发

<button class="btn btn-primary" data-id=@ViewData["id"] id="btnContinueDelete" onclick="deleteRecord(); return false;">Delete Sales Order</button>

但是,当我使用“id”执行 jquery 时,按钮不会触发

<button class="btn btn-primary" data-id=@ViewData["id"] id="btnContinueDelete">Delete Sales Order</button>

用于执行部分视图

<a class="btn deleteOrder btn-danger" data-modal="" href="@Url.Action("_DeleteConfirmation", "WebOrder", new { id = @Model.Web_Order_ID, shipToName=@Model.Ship_To_Name }) role="button" data-toggle="modal">
    <span class="glyphicon glyphicon-edit"></span>
</a>

这是部分视图

<!-- Modal -->
<div class="modal-header">
    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
    <h3>Ship_To_Name</h3>
</div>
<div class="modal-body">
    <p>
        Are you sure you want to delete this Sales Order <label id="shipto-name">@ViewData["name"]</label> ID:
        <label id="data-id">@ViewData["id"]</label>
    </p>
</div>
<div class="modal-footer">
    <button class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button>
    <button class="btn btn-primary" data-id=@ViewData["id"] id="btnContinueDelete" onclick="writeRecord(); return false;">Delete Sales Order</button>

</div>

这是 jquery:

$(function () {
    $.ajaxSetup({ cache: false, async: true });

    $("a[data-modal]").on("click", function (e) {
        $('#myModalContent').load(this.href, function () {
            $('#myModal').modal({
                keyboard: true
            }, 'show');

            bindForm(this);
        });
        return false;
    });

    //Not working funtion
    $('#btnContinueDelete').click(function() {
        var id = $("button[data-id]").val();
        $.post(Url.Action("_DeleteConfirmation", "WebOrder"), { id: id }, function(data) {
            alert("data deleted");
        });
    });
});

// Working function
function writeRecord() {
    var id = $("button[data-id]").val();
    $.post(Url.Action("_DeleteConfirmation", "WebOrder"), { id: id }, function (data) {
        alert("data deleted");
    });
}

【问题讨论】:

  • 什么是bindForm(this);
  • var id = $("button[data-id]").val(); 将始终返回undefinedbutton 没有value 属性)。必须是var id = $(this).data('id');
  • bindForm(this) 是一个用于显示模态对话框的函数。
  • 感谢 Stephen 进行了更改,但按钮仍未触发
  • 你的意思是你连剧本都没打?是否动态加载内容,这种情况下需要使用事件委托

标签: jquery html razor model-view-controller


【解决方案1】:

因为您的局部视图是动态加载的,所以当您注册点击事件时将不起作用,因为到那时该 id 不存在。

您将需要使用on,例如:

$('#myModalContent').on('click', '#btnContinueDelete', function(event){
        var id = $("button[data-id]").val(); // remember change this
        $.post(Url.Action("_DeleteConfirmation", "WebOrder"), { id: id }, function(data) {
            alert("data deleted");
        })
});

有关on 的更多信息,请查看jquery 网站:http://api.jquery.com/on/

【讨论】:

  • 发帖效果很好!遇到了问题。 Url.Action 无法正常工作。收到以下错误消息localhost:49308/WebOrder/…........ 代码看起来像这样 var id = $(this).data('id'); var url = '@Url.Action("_DeleteConfirmation", "WebOrder")'; $.post(url, { id: id }, function (result) { alert('success'); });
  • @RThompson 是您在 javascript 文件中显示的代码吗?看起来@Url.Action("_DeleteConfirmation", "WebOrder") 被视为字符串未被 razor 评估,所以我猜你给我看的代码在一个 javascript 文件中。如果是,解决方法是接受 url 作为函数参数,并在 razor 中使用 url.action 并将其传入。顺便说一句,注释不太好显示代码,如果上述方法不起作用,可以你修改你的问题并告诉我代码在哪里被调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
  • 1970-01-01
相关资源
最近更新 更多