2012-04-04 15 views
11

Tamam, ben bir web kullanıcısıyım ama itiraf etmeliyim ki şimdi tamamen bağladım. İşte benim sorunum:JQuery ve Ajax.BeginForm() aynı verinin iki kez gönderilmesi

MVCContrib ızgarası ve JQuery iletişim kutusuna sarılmış bir Ajax formunu oluşturan bir "Hesap Ekle" bağlantısı olan bir sayfam var. İş akışından geçtiğimde her şey ilk kez harika çalışıyor. Yeni bir öğe ekleyebilir ve JQuery/Ajax aracılığıyla ızgarayı yenileyebilirim (yani bence). Ancak, formu ikinci kez eklemeye çalıştığımda, ilk formdaki veriler her zaman gönderilir. Soruna çok uzun zamandır bakıyorum ve tamamen sıkışmış olduğumu itiraf etmeliyim. Btw - Eminim bu tamamen yanlış yapıyorum, bu yüzden daha iyi bir şey önermek için çekinmeyin.

@using (Ajax.BeginForm("SaveCheckAccount", "UserManagement", null, new AjaxOptions { OnSuccess = "onAccountAdded", OnFailure = "onAccountAddedFailed"}, new { id = "accountDetails" })) 
{ 
    @Html.ValidationSummary(true) 
    @Html.HiddenFor(model => model.Id) 
    @Html.HiddenFor(model => model.version) 
    @Html.HiddenFor(model => model.User_Id) 
    @Html.HiddenFor(model => model.IsDefault)   
    <table> 
     <tr> 
      <td> 
       Account Number 
      </td> 
      <td> 
       @Html.TextBoxFor(model => model.AccountNumber) 
       @Html.ValidationMessageFor(model => model.AccountNumber, "*") 
      </td> 
     </tr> 
     <tr> 
      <td> 
       Routing Number 
      </td> 
      <td> 
       @Html.TextBoxFor(model => model.RoutingNumber) 
       @Html.ValidationMessageFor(model => model.RoutingNumber, "*") 
      </td> 
     </tr> 
     <tr> 
      <td> 
       Account Type 
      </td> 
      <td> 
       @Html.DropDownListFor(model => model.AccountType_Id, new SelectList(@accountTypes, "ID", "Name", Model.AccountType_Id)) 
       @Html.ValidationMessageFor(model => model.CheckAccountType) 
       @Html.ValidationMessageFor(model => model.AccountType_Id, "*") 
      </td> 
     </tr> 
     <tr> 
      <td> 
       Bank Name 
      </td> 
      <td> 
       @Html.TextBoxFor(model => model.BankName) 
       @Html.ValidationMessageFor(model => model.BankName, "*") 
      </td> 
     </tr> 
     <tr> 
      <td> 
       Account Name 
      </td> 
      <td> 
       @Html.TextBoxFor(model => model.AccountName) 
       @Html.ValidationMessageFor(model => model.AccountName, "*") 
      </td> 
     </tr> 
    </table> 
} 

<script type="text/javascript"> 
    $.ajaxSetup({ cache: false }); 
</script> 

Bu javascript bank.js yatar başlangıçta bu görünümde ekle bağlantısını tıklayarak oluşturulduğu için

function BindCommands(createUrl) { 

     $("#modalAdd").live("click", function (e) { 
      var dialogBox = $("<div>"); 
      e.preventDefault(); 
      $(dialogBox).dialog({ 
       autoOpen: false, 
       resizable: false, 
       title: 'Create Account', 
       modal: true, 
       show: { effect: "blind", duration: 50 }, 
       hide: { effect: "blind", duration: 50 }, 
       open: function (event, ui) { 
        $.ajax(
         { 
          type: "Get",       
          url: createUrl, 
          success: function (result) { 
           $(dialogBox).html(result); 
          } 
         }); 
       }, 

       buttons: { 
        Save: function() { 
         $("#accountDetails").submit(); 
         $(this).dialog('close');      
        }, 
        Cancel: function() { 
         $(this).dialog("close"); 
        } 
       } 
      }); 
      $(dialogBox).dialog('open'); 
     }); 
    } 

    function onAccountAdded(data, status, xhr) {  
     $("#accounts-grid").html(data); 
    }; 

    function onAccountAddedFailed(data, status, xhr) { 
     alert("Failed");  
    }; 

file:

<script type="text/javascript"> 
    $.ajaxSetup({cache:false}); 
    $(document).ready(function() { 
     var createUrl = '@Url.Action("NewBankAccountDetails", "UserManagement", new {[email protected]})'; 
     BindCommands(createUrl); 
    }); 

</script>  
@if (Model != null && Model.Id > 0) 
{ 

    <tr> 
     <td class="header" colspan="2"> 
      User Accounts 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <a href="#" id="modalAdd">Add Account</a> 
     </td> 
    </tr> 

    Html.RenderPartial("_BankAccountGrid", Model.CheckAccounts); 
} 

cevap

35
İşte

form

Aynı senaryoyu aldım ve aşağıdaki betiğin dahil olduğunu fark edinceye kadar kafamı bir duvara çarptı İki kez uded:

<script src="/Scripts/jquery.unobtrusive-ajax.js"></script> 

Ben senaryo benim paket içinde ayarlanır ve görünümü şablonları da ajax form tarafından çifte sonrası en sonuçlandı bunu dahil oldu.

(bazı reaso her dosyanın iki görebileceğiniz ayıklayıcısında gibi) dürüstçe bu benim konuydu ümit ödül :-P

+0

çift ama onun değil değil eğer, yardımcı olur. Günümü kaydetmek için – Worthy7

+0

Thx! –

+1

Bu Cevap doğru bir şekilde işaretlenmelidir. – AlphaTry

İlgili konular