2009-07-06 12 views
7

के साथ एकाधिक अपडेट लक्ष्य आईडी। Ajax.ActionLink के साथ एकाधिक अद्यतन लक्ष्य आईडी निर्दिष्ट करने का कोई तरीका है ताकि मैं कॉलबैक पर आंशिक दृश्यों का एक सेट प्रस्तुत कर सकूं?Ajax.ActionLink ASP.Net MVC

जो समस्या मैं देख रहा हूं वह यह है कि अजाक्स। एक्शनलिंक केवल मेरे लिए अपडेट करने के लिए एक लक्ष्य आईडी प्रदान करता है, लेकिन मुझे एजेक्स कॉल के बाद विभिन्न डेटा के साथ पृष्ठ के कई क्षेत्रों को अपडेट करना है।

इस पर कोई मदद महान होगी! धन्यवाद!

उत्तर

4

नहीं, ऐसा नहीं है। हालांकि, आप कोड लिख सकते हैं जो यह स्वयं करता है। आपको यह करना होगा:

  1. वापस आने वाले HTML को विभिन्न "क्षेत्रों" में विभाजित करें जो आप पृष्ठ के विभिन्न हिस्सों पर लागू होंगे। आप इसे नियंत्रक पर कर सकते हैं (शायद एकाधिक क्रियाएं प्रस्तुत करके और लौटाए गए HTML टुकड़ों की एक सूची संग्रहीत करके) या जावास्क्रिप्ट में।
  2. लौटाए गए HTML को लेने के लिए जावास्क्रिप्ट कोड लिखें, उन लक्ष्यों को फिर से भरें जिन्हें आप अपडेट करना चाहते हैं, और प्रत्येक के लिए उपयुक्त HTML खंड लागू करें। कोड नीचे दिए गए कोड की तरह कुछ दिखाई देगा।
  3. अजाक्स फॉर्म HTML सहायक का उपयोग न करें। इसके बजाय, एक मानक रूप प्रस्तुत करें और इसे जावास्क्रिप्ट के माध्यम से सबमिट करें।

उदाहरण:

$.ajax({ 
    type: "POST", 
    url: "/action/controller", 
    success: function(data) { 
     var key; 
     for (key in data) { 
      $("#" + key).html(data[key]); 
     } 
    } 
}); 

यह मानती है कि कार्रवाई आप एक वस्तु जहां संपत्ति के नाम तत्वों की आईडी अद्यतन करने के लिए कर रहे हैं वापस आ जाएगी कहते हैं, और संपत्ति मानों को स्ट्रिंग्स एचटीएमएल टुकड़े कर रहे हैं।

6

आप इस लिंक की जाँच कर सकते हैं: http://devlicio.us/blogs/sergio_pereira/archive/2009/08/23/asp-net-mvc-with-jquery-superload.aspx

मैं एक ही समस्या थी और यह मेरे इसे हल करने

+0

मैंने इसे वीबी में काम करने के लिए मामूली परिवर्तनों के साथ काम किया, काम किया। फिर भी, यह एक गन्दा समाधान है। हमें इस बात का सहारा लेने के लिए एमवीसी टीम को सिर में फेंकने की जरूरत है, वे सिर्फ एक ढांचा क्यों नहीं बना सकते हैं जो काम करता है और सामान्य करता है, हर रोज़ मूलभूत चीजों की अपेक्षा करता है? –

+0

@ Erx_VB.NExT.Coder: क्लीनर समाधान जेसन परिणाम का उपयोग करना है, आप इस परिणाम पर जावास्क्रिप्ट का उपयोग कर पेज के किसी भी भाग को अपडेट कर सकते हैं – Gregoire

+0

@ Erx_VB.NExT.Coder मुझे पता है कि यह कुछ समय पहले था, लेकिन आपको चाहिए अगर आपको एएसपीनेट फ्रेमवर्क के साथ रहना नहीं है, तो अपाचे विकेट में देखें। विकेट सर्वर साइड कोड के लिए जावा का उपयोग करता है हालांकि (केवल मामूली अंतर)। – eaglei22

1

मैं जानता हूँ कि इस सवाल का वर्ष है, लेकिन आपकी मदद करता है एक ही समाधान का उपयोग करता है, तो के रूप में @Gregoire की ओर इशारा किया (http://devlicio.us/blogs/sergio_pereira/archive/2009/08/23/asp-net-mvc-with-jquery-superload.aspx) सर्वर साइड के लिए आप AjaxOptions में एक से अधिक आईडी पारित कर सकते हैं

@Ajax.ActionLink("Link", "Action", new AjaxOptions { UpdateTargetId = "id1, #id2" }) 

एमवीसी ढांचा स्वचालित रूप से '#' सेपर प्रीपेड करेगा इस मामले में। जावास्क्रिप्ट बस केवल उस सामग्री को आकर्षित करने और है कि एक ही साथ एक ही आईडी को बदलने के लिए एक ही आईडी कि पारित कर दिया है उपयोग कर रहा है

mode = (element.getAttribute("data-ajax-mode") || "").toUpperCase(); 
$(element.getAttribute("data-ajax-update")).each(function (i, update) { 
    var top, 
     html = $("#" + update.id, data).html(); 

    switch (mode) { 
    case "BEFORE": 
     top = update.firstChild; 
     $("<div />").html(html).contents().each(function() { 
      update.insertBefore(this, top); 
     }); 
     break; 
    case "AFTER": 
     $("<div />").html(html).contents().each(function() { 
      update.appendChild(this); 
     }); 
     break; 
    default: 
     $(update).html(html); 
     break; 
    } 
}); 

: फिर आप इस तरह देखने के लिए आस-पास लाइन # 45 jquery.unobtrusive-ajax.js के asyncOnSuccess समारोह को संशोधित करने की आवश्यकता होगी सामग्री। यह Ajax.BeginForm() के लिए भी काम करता है। सही बात?