2012-04-04 9 views
11

ठीक है, मैं कुल वेब नौसिखिया हूं लेकिन मुझे स्वीकार करना होगा कि मैं अब पूरी तरह से झुका हुआ हूं। यहां मेरी समस्या है:JQuery और Ajax.BeginForm() एक ही डेटा को दो बार पोस्ट करना

मेरे पास एक एमवीसीसीओन्ट्रिब ग्रिड वाला एक पृष्ठ है और एक "खाता जोड़ें" लिंक है जो एक JQuery संवाद में लपेटकर एक अजाक्स फ़ॉर्म लाता है। जब मैं वर्कफ़्लो से गुजरता हूं तो पहली बार सबकुछ बढ़िया काम करता है। मैं एक नया आइटम जोड़ सकता हूं और ग्रिड को JQuery/Ajax के माध्यम से रीफ्रेश कर सकता हूं (इसलिए मुझे लगता है)। हालांकि, जब मैं फॉर्म को दूसरी बार जोड़ने का प्रयास करता हूं, तो पहले फॉर्म का डेटा हमेशा सबमिट किया जाता है। मैं बहुत लंबे समय तक समस्या को देख रहा हूं और मुझे स्वीकार करना होगा कि मैं पूरी तरह से अटक गया हूं। बीटीडब्ल्यू - मुझे यकीन है कि मैं यह पूरी तरह से गलत कर रहा हूं इसलिए कुछ बेहतर सुझाव देने के लिए स्वतंत्र महसूस करें।

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

यह जावास्क्रिप्ट 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");  
    }; 

:

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

मैं इसे स्क्रिप्ट मेरी बंडल के अंदर सेट और देखने टेम्पलेट्स भी यह जो ajax रूप से डबल पोस्ट की में हुई शामिल थे।

आशा है कि यह, में मदद करता है, तो इनाम :-P

+0

मैं ईमानदारी से आशा व्यक्त की कि यह मेरा मुद्दा था दोगुना नहीं (डीबगर में के रूप में मैं कुछ reaso के लिए हर फ़ाइल के दो देख सकते हैं), लेकिन इसके नहीं। – Worthy7

+0

Thx मेरे दिन को बचाने के लिए! –

+1

यह उत्तर सही के रूप में चिह्नित किया जाना है। – AlphaTry

संबंधित मुद्दे