2012-03-10 62 views
1

相同的功能有了asp.net的MVC我们可以做一个Ajax调用这样更换Ajax.ActionLink通过使用jQuery

<a data-ajax="true" data-ajax-begin="fctTabLoading" data-ajax-complete="fctTabLoaded" data-ajax-mode="replace" data-ajax-update="#main-content" href="/MyController/MyAction/19">my link text</a> 

现在我想要执行相同的Ajax调用,但从jQuery,我不知道如何继续!

我想是这样的:

    $.ajax({ 
         type: "Post", 
         url: myURL, 
         begin: fctTabLoading, 
         complete: fctTabLoaded, 
         mode: "replace", 
         update: "#main-content", 
         cache: false, 
         success: function() { alert('success'); } 
        }); 

我知道上面AJAX脚本将无法工作,因为“模式”和“更新”无法识别。所以我被封锁了。

这让我发疯:(

为什么我不能使用MVC ActionLink的呢?因为我首先要表明一个jQuery对话框让用户确认,然后只做Ajax调用以刷新一个特定的div在我的网页。

任何帮助是极大的赞赏。

感谢。

回答

0

如你所知,在Ajax.ActionLink使用jquery.unobtrusive-ajax.js执行AJAX的联系。

如果您查看该文件,您将看到事件处理程序使用jQuery的实时事件绑定器。这将事件侦听器绑定到文档对象。所以,如果你想确认触发此事件之前,你可以直接绑定到元素像下面这样:

$('#YOUR_ELEMENT').click(function() { 
    var confirmed = confirm("CONFIRM_MESSAGE"); 
    if (!confirmed) { 
     return false; 
    } 
    return true; 
}); 

使用jQuery的对话框,你可以做到以下几点:

function confirmDialog() { 
    $('#YOUR_DIALOG').dialog(
     { buttons: { "Ok": function() { return true; }, 
        { "Cancel": function() {return false;} 
     } 
    }); 

}

然后你会在之前的函数中设置confirmDialog()。 ***对话框选项可能并不完全符合你的要求,但这应该会让你走。

+0

谢谢Brian。我不想使用确认JavaScript提供的难看的弹出窗口。我更喜欢使用jquery对话框。这就是为什么我需要从jQuery做我的ajax调用(我认为)。任何可能的解决方案是可能的? – Bronzato 2012-03-10 20:25:47

+0

我从来没有真正使用jQuery的对话框,所以我编辑的答案是基于查看文档几分钟。 – 2012-03-10 20:48:36

+0

不幸的是,使用自定义函数(用于调用jquery对话框)简单替换确认javascript函数不起作用。我希望别人能帮助我。不管怎么说,还是要谢谢你。 – Bronzato 2012-03-10 21:04:00

2

您也可以用普通链路更换您的Ajax链接开始:

@Html.ActionLink(
    "my link text",     // linkText 
    "MyAction",      // actionName 
    "MyController",     // controllerName 
    new { id = Model.RequestID },  // routeValues 
    new { id = "mylink" }    // htmlAttributes 
) 

将产生以下标记:

<a href="/MyController/MyAction/12345" id="mylink">my link text</a> 

,然后在一个单独的js文件中悄悄地AJAXify它:

$(function() { 
    $('#mylink').click(function() { 
     $.ajax({ 
      url: this.href, 
      type: 'POST', 
      beforeSend: fctTabLoading, // corresponds to your OnBegin callback 
      complete: fctTabLoaded,  // corresponds to your OnComplete callback 
      success: function(result) { 
       $('#main-content').html(result); 
      } 
     }); 

     return false; 
    }); 
});