jQuery

2011-01-04 3 views
6

के माध्यम से लोड एसीएक्स jQuery द्वारा एएसएक्स फ़ाइल लोड करने का कोई तरीका है?jQuery

अद्यतन:

@Emmett और @Yads के लिए धन्यवाद। मैं निम्नलिखित jQuery AJAX कोड के साथ एक हैंडलर का उपयोग कर रहा हूं:

jQuery.ajax({ 
    type: "POST", //GET 
    url: "Foo.ashx", 
    data: '{}', 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (response) 
    { 
     jQuery('#controlload').append(response.d); // or response 
    }, 
    error: function() 
    { 
     jQuery('#controlload').append('error'); 
    } 
}); 

लेकिन मुझे एक त्रुटि मिलती है। क्या मेरा कोड गलत है?

एक और अद्यतन: मैं

error: function (xhr, ajaxOptions, thrownError) 
{ 
    jQuery('#controlload').append(thrownError); 
} 

का उपयोग कर रहा है और इस मैं क्या मिलता है:

अमान्य JSON:
टेस्ट => (इस परीक्षण मेरी ascx अंदर लेबल है)

और त्रुटि के बाद मेरी ascx फ़ाइल !!!

एक और अद्यतन:

मेरी ascx फ़ाइल इस तरह somthing है:

<asp:DropDownList ID="ddl" runat="server" AutoPostBack="true"> 
    <asp:ListItem>1</asp:ListItem> 
    <asp:ListItem>2</asp:ListItem> 
</asp:DropDownList> 
<asp:Label ID="Label1" runat="server">Test</asp:Label> 

लेकिन जब ajax बुला मैं एएसपी में इस त्रुटि मिलती है: :(

नियंत्रण 'ctl00_ddl 'ड्रॉपडाउनलिस्ट' प्रकार को रनैट = सर्वर के साथ एक फॉर्म टैग के अंदर रखा जाना चाहिए।

@Yads के लिए धन्यवाद। लेकिन उसका समाधान केवल एचटीएमएल टैग के साथ काम करता है।

+0

http://stackoverflow.com/questions/1212639/possible-to-load-ascx-with -jquery-load-function – Anders

+0

क्या यह असंभव है? एएसएक्स फ़ाइल को एएसपीएक्स में परिवर्तित करने का कोई तरीका है? या बेहतर तरीका? – Raika

+0

त्रुटि फ़ंक्शन एक अनुरोध ऑब्जेक्ट ले सकता है, त्रुटि का पता लगाने के लिए request.responseText की जांच करें। – Vadim

उत्तर

10

एम्मेट के समाधान

public class FooHandler : IHttpHandler 
{ 

    public void ProcessRequest(HttpContext context) 
    { 
     context.Response.ContentType = "text/html"; 
     context.Response.Write(RenderPartialToString("Foo.ascx")); 
    } 

    private string RenderPartialToString(string controlName) 
    { 
     Page page = new Page(); 
     Control control = page.LoadControl(controlName); 
     page.Controls.Add(control); 

     StringWriter writer = new StringWriter(); 
     HttpContext.Current.Server.Execute(page, writer, false); 

     return writer.ToString(); 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 

उपयोग निम्नलिखित jQuery अनुरोध को वापस ले बिल्डिंग

jQuery.ajax({ 
    type: "POST", //GET 
    url: "Foo.ashx", 
    dataType: "html", 
    success: function (response) 
    { 
     jQuery('#controlload').append(response); // or response 
    }, 
    error: function() 
    { 
     jQuery('#controlload').append('error'); 
    } 
}); 
+0

यह काम वेबफॉर्म में भी है? – Raika

+0

@ रायका हां बस जोड़ें-> नया आइटम-> जेनेरिक हैंडलर – Vadim

+0

धन्यवाद और खेद है ...: डी – Raika

1

* .ascx फ़ाइलों को सर्वर की तरफ (* .aspx पृष्ठ के अंदर) पर प्रस्तुत किया जाता है, क्लाइंट पक्ष नहीं (जहां जावास्क्रिप्ट निष्पादित किया जाता है)।

एक विकल्प एक खाली * .aspx बनाने के लिए हो सकता है, उपयोगकर्ता नियंत्रण * .aspx पृष्ठ पर रखें, और उसके बाद उस पृष्ठ को jQuery के माध्यम से प्राप्त करें और परिणाम पृष्ठ पर डंप करें।

संपादित

अपनी टिप्पणी के आधार पर, मैं एक सुझाव है:

आप एक सीएमएस शैली आवेदन विकसित कर रहे हैं, तो आप अपने * .ascx नियंत्रण बनाने चाहिए ताकि वे compatible with the ASP.NET AJAX Toolkit हैं। इससे उपयोगकर्ताओं को पूर्ण रीफ्रेश किए बिना पृष्ठ पर सामग्री जोड़ने की अनुमति मिल जाएगी।

यदि आप वास्तव में उपयोगकर्ता के लिए चीजों को अच्छा बनाना चाहते हैं, तो आपको Web Parts and ASP.NET AJAX की जांच करनी चाहिए क्योंकि वेब पार्ट्स वास्तव में डिज़ाइन किए गए थे ताकि उपयोगकर्ता अपने पृष्ठों पर सामग्री को कस्टमाइज़ कर सकें।

+0

मैं वेब आवेदकोब सीएमएस जैसे विकास कर रहा हूं। मुझे एसीएक्स फ़ाइल के रूप में मेरे आवेदन के कुछ हिस्से को कॉल करने की आवश्यकता है। मैं पेज को पोस्टबैक नहीं करना चाहता हूं। क्या ऐसा करने का एक बेहतर तरीका है? मैं भी सभी भाग लोड नहीं करना चाहता। – Raika

+0

@Raika - यदि आप वास्तव में चीजों को सही तरीके से करना चाहते हैं, तो आप अपना पृष्ठ एएसपी.NET वेबफॉर्म AJAX (UpdatePanel, आदि) का समर्थन करेंगे और आपके नियंत्रण को इसके साथ संगत बना देंगे। इससे आप AJAX के माध्यम से गतिशील रूप से चीजों को लोड कर सकते हैं। –

+0

धन्यवाद। क्या आप मुझे वेब पार्ट्स या वेब पार्ट्स के लिए पूर्ण ट्यूटोरियल के बारे में अधिक लिंक दे सकते हैं? – Raika

3
public ActionResult Foo() 
{ 
    return new ContentResult 
    { 
     Content = RenderPartialToString("Foo.ascx", null), 
     ContentType = "text/html" 
    }; 
} 

//http://www.klopfenstein.net/lorenz.aspx/render-partial-view-to-string-asp-net-mvc-benchmark 
public static string RenderPartialToString(string controlName, ViewDataDictionary viewData) 
{ 
    ViewPage vp = new ViewPage(); 

    vp.ViewData = viewData; 

    Control control = vp.LoadControl(controlName); 
    vp.Controls.Add(control); 

    StringBuilder sb = new StringBuilder(); 

    using (StringWriter sw = new StringWriter(sb)) 
    { 
     using (HtmlTextWriter tw = new HtmlTextWriter(sw)) 
     { 
      vp.RenderControl(tw); 
     } 
    } 

    return sb.ToString(); 
} 
+0

धन्यवाद लेकिन मैं webforms का उपयोग नहीं कर रहा हूँ mvc !!! :( – Raika

+0

यह एक अच्छी चाल है – Vadim

+0

यह एएसपी.नेट एमवीसी है। ओपी स्पष्ट रूप से वेबफॉर्म का उपयोग कर रहा है। –