2012-04-04 2 views
11

Хорошо, я полный новичок в сети, но я должен признать, что теперь я полностью подключен. Вот моя проблема:JQuery и Ajax.BeginForm() публиковать те же данные дважды

У меня есть страница с сеткой MVCContrib и ссылка «Добавить учетные записи», которая вызывает форму Ajax, завернутую в диалог JQuery. Когда я просматриваю рабочий процесс, в первый раз все отлично работает. Я могу добавить новый элемент и обновить сетку через JQuery/Ajax (так я думаю). Однако, когда я пытаюсь добавить форму во второй раз, всегда отображаются данные из первой формы. Я слишком долго искал проблему и должен признать, что я полностью застрял. Btw - Я уверен, что я делаю это совершенно неправильно, поэтому не стесняйтесь предлагать что-либо лучше.

Вот форма:

@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> 

Это Javascript находится в bank.js файл

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");  
    }; 

для интернета intially оказываемых нажав на ссылку добавить с этой точкой зрения:

<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); 
} 

ответ

35

У меня была такая же проблема, и я ударил головой о стену, пока не заметил, что следующий сценарий включает в себя uded дважды:

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

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

Надеется, что это помогает, если не в два раз Баунти :-P

+0

Я искренне надеялся, что это был моим вопрос (как в отладчике я вижу два каждый файл для некоторого reaso), но его нет. – Worthy7

+0

Thx для спасения моего дня! –

+1

Этот ответ должен быть помечен как правильный. – AlphaTry

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

  • Нет связанных вопросов^_^