2012-02-24 41 views
2

我有一个要求,当用户点击一个Ajax ActionLink时,显示一个自定义的模态jQuery确认。但是,当我尝试将其添加到Ajax链接时,ajax调用将继续,并且不允许确认来停止该调用。我试过使用OnBegin函数,但是当我调用preventDefault时,它会抛出一个不支持的方法错误。如果我返回false,它不允许任何方式继续通话。有人知道如何做到这一点?使用Ajax.ActionLink,我如何显示自定义模态确认?

这里是我想要添加的确认链接:

<div class="sign">@Model.Email | @Ajax.ActionLink("Sign Out", "SignOut", new { area = "", controller = "Account" }, new AjaxOptions { HttpMethod = "POST" })</div> 

这里是我试图执行代码:

$('#MainNav ul li a, .header-top a').click(function (e) { 
     e.preventDefault(); 
     var link = $(this).attr('href'); 
     $('.confirm-dialog .confirm-this').attr('href', link); 

     $('.confirm-dialog').dialog({ 
      modal: true, 
      draggable: false, 
      overlay: { opacity: 0.8 }, 
      resizable: false, 
      width: 400, 
      open: function() { 
       $('.close-dialog').click(function (e) { e.preventDefault(); $(this).parents('.ui-dialog').remove(); }); 
       $('.confirm-this').click(function() { }); 
      } 
     }); 
    }); 

任何帮助将是很大的赞赏。我已经做了大量的搜索工作,试图弄清楚这一点,但是我仍然面临同样的基本问题。如何在用户点击确认之前停止Ajax呼叫?

回答

1

不要过多依赖预定义的ActionLink方式。有两种方法来归档此:

  1. 微软unobstrucive的Ajax方法将被自动添加到链接 - 你必须使用jQuery删除它们,并通过做你自己的Ajax调用。但是你必须在添加jquery后删除这个处理程序 - 这可能很奇怪,我不知道什么时候才能完成。

  2. 不要在您的案例中使用@Ajax.ActionLink - 只需使用@Url.Action构建您自己的标签并将onclick处理程序设置为您的标签。但你也必须自己做ajax调用。

在这两种情况下,建立自己的Ajax调用只是改变你的确认:

$('.confirm-this').click(function() { $.post(link) }); 
+0

谢谢你,马克。我使用你的代码片段来处理我的.confirm - 这个点击函数,并添加一个只返回false的OnBegin函数。我感谢帮助! – Paul 2012-02-24 17:29:35

相关问题