2012-02-02 26 views
7

बदलें एक आंशिक दृश्य में, मैं MVCs Ajax.Beginform उपयोग कर रहा हूँ इसके बाद जैसे:MVC Ajax.BeginForm अजीब व्यवहार

<div id="divToReplace"> 
    @using (Ajax.BeginForm("Action", "Controller, 
          new AjaxOptions 
          { 
           InsertionMode = System.Web.Mvc.Ajax.InsertionMode.Replace, 
           UpdateTargetId = "divToReplace" 
          }, 
          new 
          { 
           id = "formID" 
          })) 
    { 
     ... 
</div> 

जब पर्चे को जमा करने, मैं उम्मीद होती है कि छेद div "divToReplace" ने ले ली है उत्तर (आंशिक दृश्य फिर से)। लेकिन बजाय div "divToReplace" के भीतरी एचटीएमएल जवाब द्वारा बदल दिया गया है, इसलिए आंशिक दृश्य की शुरुआत इस तरह दिखता है:

<div id="divToReplace"> 
    <div id="divToReplace"> 
      ... 

क्या मैं गलत कर रहा हूँ?

उत्तर

4

ठीक है, एक निश्चित समय के बाद, मैं एक ही समस्या में पड़ गए और अब मैं यह स्पष्ट कर दिया तो मैं jquery.unobtrusive-ajax.js में एक नज़र और responsable समारोह था बनाना चाहते थे:

function asyncOnSuccess(element, data, contentType) { 
    var mode; 

    if (contentType.indexOf("application/x-javascript") !== -1) { // jQuery already executes JavaScript for us 
     return; 
    } 

    mode = (element.getAttribute("data-ajax-mode") || "").toUpperCase(); 
    $(element.getAttribute("data-ajax-update")).each(function (i, update) { 
     var top; 
     switch (mode) { 
      case "BEFORE": 
       top = update.firstChild; 
       $("<div />").html(data).contents().each(function() { 
        update.insertBefore(this, top); 
       }); 
       break; 
      case "AFTER": 
       $("<div />").html(data).contents().each(function() { 
        update.appendChild(this); 
       }); 
       break; 
      default: 
       // Changed this line because of generating duplicate IDs 
       //$(update).html(data); 
       $(update).html($(data).html()); 
       break; 
     } 
    }); 
} 

जैसा कि आप डिफ़ॉल्ट भाग में देख सकते हैं, उत्तर updatetargetid को प्रतिस्थापित नहीं कर रहा था, लेकिन इसकी सामग्री को उत्तर के साथ बदल दिया गया। अब मैं जवाब का आंतरिक हिस्सा लेता हूं और सब कुछ ठीक काम करता है!

+0

उपयोग $ (अपडेट) .replaceWith ($ (डेटा)); बजाय। – Andrei

+0

यह भी देखें: http://aspnet.codeplex.com/workitem/8767 – Andrei

+0

ठीक है, मैंने पहले यह किया था, लेकिन यदि 'अपडेट' एक jQuery संवाद या किसी अन्य प्रकार का नियंत्रण हो सकता है, तो यह टूट जाता है। – iappwebdev

2

बस पिछले जवाब के अलावा, आप अपने खुद हालत

ajax.js: 
case "REPLACEWITH": 
$(update).replaceWith(data); 
break; 

jquery.unobtrusive- और अपने खुद के पैरामीटर का उपयोग कर HtmlAttributes पारित करने के लिए जोड़ सकते हैं:

@using (Ajax.BeginForm("Action", "Controller", null, new AjaxOptions {UpdateTargetId = "DivContainer" } 
new { enctype = "multipart/form-data", data_ajax_mode = "replacewith" } 
संबंधित मुद्दे