【问题标题】:Ajax.Actionlink OnBegin confirmation will not prevent the ajax call from being called if the user click on "Cancel" button如果用户单击“取消”按钮,Ajax.Actionlink OnBegin 确认不会阻止调用 ajax 调用
【发布时间】:2012-03-27 18:40:30
【问题描述】:

我有以下 ajax.actionlink:-

@Ajax.ActionLink("Delete", "Delete", "Answer",
    new { id = answer.AnswersID },
      new AjaxOptions
      {
          OnBegin = "deleteconfirmation1",
          HttpMethod = "Post",
          UpdateTargetId = @answer.AnswersID.ToString(),
          OnSuccess = "deleteconfirmation",

      })

以及在执行 ajax 调用之前应该显示确认消息的以下 deleteconfirmation1.js:-

function deleteconfirmation1() {
jConfirm('Deletion Confirmation', 'Are you sure you want to delete this Answer');
}

我面临的问题是,即使用户单击取消按钮,onbegin 确认也不会阻止执行 onsuccess 脚本?所以我怎样才能让 OnBegin 作为确认阶段工作,所以应用程序将等待用户选择“Ok”或“cancel”,然后再处理 ajax 调用! ?? BR

【问题讨论】:

    标签: jquery ajax asp.net-mvc-3


    【解决方案1】:

    你需要从OnBegin方法返回false来取消请求。

    请注意,Ajax.ActionLink 已经支持使用 AjaxOptions.Confirm 属性进行确认。

    您还需要在视图/布局中包含 ~/Scripts/jquery.unobtrusive-ajax.js 才能使用 @Ajax. 帮助程序。

    jConfirm 的编辑问题:

    您的问题是jConfirm 的签名如下:

    void jConfirm(message, [title, callback])
    

    它不是返回真/假,而是期望用户单击确定/取消时调用的回调函数。

    这会导致问题,因为您需要从OnBegin 返回false,但在回调中没有来自jConfirm 的返回值...

    所以你应该等待回调......看到这个SO问题Can you wait for javascript callback? (这也是关于jConfirm)了解更多信息。

    结论是不能使用jConfirm通过OnBegin方法取消请求。

    【讨论】:

    • 我没有使用 AjaxOption.Confirm 因为我想使用自定义的 java 脚本确认。第二件事,即使在选择 Ok 或 Cancel 之前仍然显示 JConfirm 对话框,也会执行删除,这就是为什么我认为它与返回 false 或不返回有关......
    • 用内置的confirm js 函数试试,因为它应该可以工作。它接缝jConfirm 执行异步确认,这就是返回值似乎无用的原因。您能否提供jConfirm 的链接?
    • 感谢您的回复;这是链接abeautifulsite.net/blog/2008/12/jquery-alert-dialogs。关于提供内置确认,我不知道应该从哪里调用我的 ajax.actionliknk 中的内置脚本
    • 我已经更新了我的答案,似乎OnBeginjConfirm 插件不兼容...
    • 感谢您的回复,所以我将使用 ajaxoption.confirm 来解决,thnx
    猜你喜欢
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 2019-12-28
    • 1970-01-01
    相关资源
    最近更新 更多