2014-01-04 3 views
0

Я представляю форму данных через вызов Ajax (я думаю?), Чтобы мой контроллер обрабатывал. Как только строка будет сохранена, я надеюсь перенаправить на исходное действие HttpGet в моем контроллере, который первоначально загрузил форму.Просмотр не освежает после вызова Ajax

Что я нахожу, так это то, что вызов ajax работает, срабатывает действие контроллера и данные сохраняются в базе данных. Однако экран не обновляется после перезагрузки View.

У меня есть точка останова на «обратном представлении (модели)» на действие в моем контроллере, который срабатывает - но экран не обновляется. Если я использую firebug и смотрю на html, я вижу, что новая строка должна отображаться на мой взгляд. Но экран, похоже, не перезагружается вообще.

Мои Javascript:

<script type="text/javascript"> 
     $(document).ready(function() { 
      $('.btnSubmitNewCard').click(function() { 
      var data = { cardNumber: $('.txtNewCardNumber').val(), cardHolder: $('.txtNewCardHolder').val(), expiryMonth: $('.txtNewExpiryMonth').val(), expiryYear: $('.txtNewExpiryYear').val(), active: $('.txtNewActive').val(), accountId: $('.Id').val() }; 

       $.ajax({ 
        url: '@Url.Action("SaveBankCard", "BankAccount")', 
        type: "POST", 
        contentType: "application/json", 
        data: JSON.stringify(data), 
        cache: false, 
        async: true, 
        success: function (result) { 
         console.log(result.toString()); 
         if (result.Success == 'true') { 
          alert('Redirecting...'); 
          window.location = '@Url.Action("EditBankAccount", "BankAccount", new {accountId = Model.Id})'; 
         } 
        }, 
        error: function() { 
         alert("Oh no"); 
        } 

       }); 
      }); 
     }); 
    </script> 

Метод управления вызывается JavaScript выше (успешно):

public ActionResult SaveBankCard(string cardNumber, string cardHolder, int expiryMonth, int expiryYear, string active, int accountId) 
{ 
    var card = new AccountCardDto 
     { 
      Id = 0, 
      AccountId = accountId, 
      Active = active == "on", 
      CardHolderName = cardHolder, 
      CardNumber = cardNumber, 
      ExpiryDate = new DateTime(2000 + expiryYear, expiryMonth, 1) 
     }; 

    int id = new BankAccountService().SaveCard(card); 
    return RedirectToAction("EditBankAccount", new { bankAccountId = accountId }); 

} 

И тогда действие контроллера, который вызывается из вызова 'RedirectToAction':

 [HttpGet] 
     [Authorize] 
     [OutputCache(Location = System.Web.UI.OutputCacheLocation.None)] 
     public ActionResult EditBankAccount(int? bankAccountId) 
     { 
      var model = new BankAccountModel(); 

      if (bankAccountId != null) 
      { 
.... 
      } 


      return View(model); 
} 

Эта последняя строка, 'return View (model)' получает вызов. Если я проверю «модель», я вижу новую строку, которая была сохранена в базе данных. Но, как я уже сказал, экран не обновляется.

Может ли кто-нибудь сказать мне, почему, и как я могу исправить/улучшить свою ситуацию?

+0

Какие данные результата контроллер ' 'есть в вашем обратном вызове ajax? – Saravana

+0

Я не уверен на 100%, как это проверить. Вы можете помочь? – Craig

+0

Просто откройте консоль (нажмите F12 в своем браузере), и вы увидите результат. – Saravana

ответ

1

Попробуйте это ... ваш метод SaveBankCard вызова EditBankAccount в контроллере и AJAX также то сделать одну вещь называют это только в AJAX или в контроллере

<script type="text/javascript"> 
     $(document).ready(function() { 
      $('.btnSubmitNewCard').click(function() { 
      var data = { cardNumber: $('.txtNewCardNumber').val(), cardHolder: $('.txtNewCardHolder').val(), expiryMonth: $('.txtNewExpiryMonth').val(), expiryYear: $('.txtNewExpiryYear').val(), active: $('.txtNewActive').val(), accountId: $('.Id').val() }; 

       $.ajax({ 
        url: '@Url.Action("SaveBankCard", "BankAccount")', 
        type: "POST", 
        contentType: "application/json", 
        data: JSON.stringify(data), 
        cache: false, 
        async: true, 
        success: function (result) { 
         console.log(result.toString()); 
         if (result != 0) **//if your method return int else check it null if your method return string** 
         { 
          alert('Redirecting...'); 
          window.location = '@Url.Action("EditBankAccount", "BankAccount", new {bankAccountId= Model.Id})'; **//change name of parameters** 
         } 
        }, 
        error: function() { 
         alert("Oh no"); 
        } 

       }); 
      }); 
     }); 
    </script> 

public int SaveBankCard(string cardNumber, string cardHolder, int expiryMonth, int expiryYear, string active, int accountId) 
{ 
    var card = new AccountCardDto 
     { 
      Id = 0, 
      AccountId = accountId, 
      Active = active == "on", 
      CardHolderName = cardHolder, 
      CardNumber = cardNumber, 
      ExpiryDate = new DateTime(2000 + expiryYear, expiryMonth, 1) 
     }; 

    int id = new BankAccountService().SaveCard(card); 
    int bankAccountId = accountId; 
    return bankAccountId ; 

} 
Смежные вопросы