2014-09-05 5 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

+0

Возврат 'null' не приводит к сбою функции ajax. Вы должны проверить результат в функции успеха - 'if (result) {сделать что-то} else {null было возвращено, так что сделайте что-то еще}' –

+0

Лучше иметь возвращаемый тип как 'JsonResult' вместо' ActionResult' для метода действия вызванный через Ajax. Таким образом, вы можете просто вернуть строку и подтвердить свою успешную/неудачную функцию метода $ .ajax. –

ответ

0

Аякса результат всегда вызывает функцию успеха, потому что вы возвращаетесь нулевой ... Для вызова функции ошибки в АЯКС заявлении, ваш метод контроллера должен бросить исключение:

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

Однако, вы можете обрабатывайте его в своем сообщении ajax:

success: function (result) { 
    if (result) 
     // error... 
    else 
     // redirect... 
} 
Смежные вопросы