【问题标题】:How to define URL in Javascript to call ActionResult methode which resides in a controller如何在 Javascript 中定义 URL 以调用驻留在控制器中的 ActionResult 方法
【发布时间】:2014-12-12 23:35:08
【问题描述】:

我使用实体框架在 MVC 中创建了 Web 应用程序来执行 CRUD 操作。当我删除任何记录时,它会将我带到删除视图,然后我就可以删除该记录。但我不想这样做,而是希望有一个警告框,通过 java 脚本说明“您确定要删除此记录”,然后无需将用户与另一个页面交谈,我想删除该记录。

我正在使用以下选项,但它没有帮助...

$(function () {
    $('table.dataList tbody a[linktype="Delete"]').click(function (e) {
        e.preventDefault();
        $.ajax({
            type: 'POST',
            url: '/DepartmentController/DeleteConformed/',
            dataType: 'script',
            success: function () {
                alert('Are you sure you want to Delete this Department');
            },
            error: function (req, status, err) {
                alert(err);
            }
        });
    });

这是缓存错误,说明“未找到”。我在说明 URL 时有什么错误吗?

【问题讨论】:

标签: javascript ajax asp.net-mvc entity-framework crud


【解决方案1】:

您的success 回调在向服务器的请求已经发送并且记录已经被删除之后被调用。

您需要在执行 Ajax 请求之前确认用户意图,通常使用window.confirm 方法。

类似:

$('table.dataList tbody a[linktype="Delete"]').click(function (e) {
    if (!window.confirm("Are you sure you want to delete this Department?"))
        return;

    e.preventDefault();

    $.ajax({
        type: 'POST',
        url: '/DepartmentController/DeleteConformed/',
        dataType: 'script',
        success: function () {
            alert('Department deleted successfully');
        },
        error: function (req, status, err) {
            alert(err);
        }
    });
});

Documentation

【讨论】:

  • 你能解释一下 URL 行吗? url: '/部门/DeleteConformed/'
【解决方案2】:

使用 jquery 对话框。在您的视图中添加:

<div id="confirm-dialog"></div>

并改变你的功能:

$('table.dataList tbody a[linktype="Delete"]').click(function (e) {
    e.preventDefault();
    $("#confirm-dialog").dialog({
        title: "Are you sure you want to delete this Department?",
        autoOpen: false,
        modal: true,
        height: 'auto',
        close: function () {
            $(this).dialog("close");
        }
    });

    $("#confirm-dialog").dialog({
        buttons: {
            "OK": function () {
                $.ajax({
                    type: 'POST',
                    url: '/DepartmentController/DeleteConformed/',
                    dataType: 'script',
                    success: function () {
                        alert('Are you sure you want to Delete this Department');
                    },
                    error: function (req, status, err) {
                        alert(err);
                    }
                });
            },
            "Cancel": function () {
                $(this).dialog("close");
            }
        }
    });
 });

【讨论】:

  • 当我点击删除控制台时,给出这个符号:(...)对话框未找到。请解释一下。
  • 您是否将带有 jquery 对话框的脚本添加到您的视图头?好像是这样的问题。
【解决方案3】:

当前您正在执行的操作会调用 action 方法,并且只有在此之后您的确认对话框才会显示。我认为你需要反过来。假设您的视图中有一个按钮可以引导用户删除某条记录,我会这样做。首先,我会在客户端有一个功能,它只会要求用户确认他/她是否确定并将按钮 onclick 设置为该功能。

 function confirmDelete(){
    $('<div id="dialog">').dialog({
             text:"Are you sure you want to delete?",
             modal:true,
             buttons:[{
                text: 'Yes',
                click: yesDeleteIt()
                },
             {
                text: 'No',
                click: function ()
                {
                   $(this).dialog('close');
                }
             }]
       })
 }

在你的 yesDeleteIt 函数中你可以使用 AJAX:

  function yesDeleteIt(){
     url= '/Department/DeleteConformed/';
     $.post(url);//
  }

【讨论】:

  • 你能解释一下如何定义 URL。我的意思是 url = '/controllername/actionname' 对吗?
  • 说它在 100% 的时间里都是正确的,那就太乐观了。但在典型情况下,大多数情况下是的,这是正确的。如果您希望 100% 正常工作,那么您可以在剃须刀内键入 '@Url.Action("ActionName","ControllerName")' 并将其作为参数发送给函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 2012-12-25
  • 2017-02-22
  • 1970-01-01
相关资源
最近更新 更多