2014-09-05 69 views
0

我有這個jQuery:重定向不應該發生

$('#SaveButton').click(function() { 
    var url = $('#SaveButton').data("url"); 
    var overview = $('#SaveButton').data("overview"); 
    var createurl = $('#SaveButton').data("createurl"); 
    var flag = true; 
    var picker = $('#DepositDatePicker').data('datetimepicker'); 
    var utcDate = getFormattedDate(picker.getLocalDate()); 
    if (flag) { 
     $.ajax({ 
      url: url, 
      type: 'POST', 
      data: { 
       DepositTemplateVersionId: $('input#DepositTemplateVersionId').val(), 
       depositDate: $('#depositDateValue').val() 
      }, 
      dataType: 'html', 
      success: function (result) { document.location = overview; }, 
      error: function (x, t, e) { document.localName = createurl; } 
     }); 
    } 
    return false; 
}); 

這是我的控制器上會發生什麼:

public ActionResult SaveDeposit(DepositCreateScreenDTO depositCreateScreenDTO) //int depositTemplateVersionId, DateTime depositDate) 
     { 
      try 
      { 
       if (this.ModelState.IsValid) 
       { 
        CommandsServiceAgent.Call(c => c.CreateDeposit(depositCreateScreenDTO.DepositTemplateVersionId, depositCreateScreenDTO.DepositDate)); 
        this.Success("Successfully created deposit"); 
        return null; 
       } 
       else 
       { 
        string Message = ""; 
        var modelStateErrors = this.ModelState.Keys.SelectMany(key => this.ModelState[key].Errors); 
        foreach (ModelError modelError in modelStateErrors) 
        { 
         Message += modelError.ErrorMessage + System.Environment.NewLine; 
        } 

        Danger(Message); 
        return null; 
       } 
      } 
      catch (FaultException<FaultDTO> ex) 
      { 
       Danger(string.Format (ex.Message)); 
       return Json(new { Message = ex.Message }); 
      } 
      catch (Exception) 
      { 
       Danger("Error creating deposit"); 
       return null; 
      } 
     } 

當一切準備好了,我的網頁被重定向罰款。 發生錯誤並且我的模型無效時,它應該保持在同一頁面上。 出於某種原因,我將重定向到我的概述頁面。

+0

jQuery沒有錯誤,因爲ajax調用工作正常。 – DavidG 2014-09-05 07:32:44

+0

返回'null'不會導致ajax函數失敗。你應該在成功函數中測試結果 - 「if(result){do something} else {null被返回,所以做別的事情}' – 2014-09-05 07:35:42

+0

對於action方法,最好是返回類型爲'JsonResult'而不是'ActionResult'通過Ajax調用。所以你可以直接返回字符串並驗證$ .ajax方法的成功/失敗函數。 – 2014-09-05 08:40:00

回答

0

阿賈克斯結果始終調用成功,函數,因爲你正在返回空... 要調用的誤差函數在阿賈克斯聲明,您的控制器方法必須拋出一個異常:

if (this.ModelState.IsValid) 
    ... 
else 
    throw new HttpException("Error ...."); 

但是,您可以在你的ajax聲明中處理它:

success: function (result) { 
    if (result) 
     // error... 
    else 
     // redirect... 
}