HTML.ActionLink重定向不会在$ .ajax()中返回false而停止

时间:2012-10-28 19:33:04

标签: asp.net-mvc-3 jquery html.actionlink

我在视图上有一个HTML.ActionLink。我正在做的是我正在调用$.ajax()函数,该函数检查来自anction的返回true或false。它击中动作,返回所需的结果true / false。但问题是当它返回false时。我需要显示一个alert,并且只有在它返回true的情况下才应该重定向。

ActionLink的:

<%: Html.ActionLink("Add Race", "AddRace",
     new {eventId = Model.EventId, fleetId=Model.SelectedFleet.ID}, 
          new{onclick="return checkFleetAddedandScroing()"}) %>

功能:

 function checkFleetAddedandScroing() {
        debugger;
        $.ajax({
            type: "GET",
            url: '<%=Url.Action("CheckFleetExists", new {eventId=Model.EventId})%>',
            dataType: "json",
            cache: false,
            success: function (data, textStatus) {
                data = eval("(" + data + ")");
                if (data == true) {
                    alert('Ok button clicked');
                    return true;
                }
                else {
                    alert("Cannot delete this fleet becasue either you have already added races to this event or the fleet has used for boat registration.");
                    return false;
                }
            }, //success
            error: function (req) {

            }
        });
    }

它总是重定向..它是否返回true / false ..它应该只在它返回true时才重定向....

请纠正我在哪里做错了..

2 个答案:

答案 0 :(得分:2)

你从AJAX回调中返回false。

这与外部函数的返回值无关; AJAX回调甚至不会在以后开始运行。

答案 1 :(得分:1)

你必须等待你的请求才能收到结果,并且这样做会将ajax函数的async参数设置为false。

编辑:您的情景很幸运。你总是可以返回false,如果成功删除,则调用一个名为DoRedirect的函数。

这是要走的路:

function checkFleetAddedandScroing() {
        debugger;
        $.ajax({
            type: "GET",
            url: '<%=Url.Action("CheckFleetExists", new {eventId=Model.EventId})%>',
            dataType: "json",        
            timeout: 30000,
            cache: false,
            success: function (data, textStatus) {
                data = eval("(" + data + ")");
                if (data == true) {
                    alert('Ok button clicked'); 
                    DoRedirect();
                }
                else {
                    alert("Cannot delete this fleet becasue either you have already added races to this event or the fleet has used for boat registration.");
                }
            }, //success
            error: function (req) {

            }
        });
        return false;
    }

  function DoRedirect(){
        //code for do redirect
  }

喝彩!