दिलचस्प पोस्ट
एक Windows बैच फ़ाइल से सिस्टम वातावरण चर सेट करना? संरचना पैडिंग और पैकिंग पॉइंटर बनाम संदर्भ MySQL में बाइनरी डेटा एमएस एसक्यूएल सर्वर में आरक्षित शब्द / खोजशब्दों वाले टेबल नाम बनाना किस परिस्थिति में एक स्क्वॉश कनेक्शन स्वचालित रूप से एक परिवेश लेन-देन लेन-देन लेन-देन में भर्ती है? एक यूआरएल से विंडोज बैच फ़ाइल फाइल डाउनलोड करें कैसे getopts में उपयोग करने के उदाहरण bash मैं PHP में कैसे एक UTF-8 सीएसवी आउटपुट कर सकता हूं जो Excel ठीक से पढ़ा जाएगा? मैं अपने वेब पेज पर सही क्लिक कैसे अक्षम करूं? क्या SQL सर्वर MySQL पर डुप्लिकेट की कुंजी अद्यतन की तरह कुछ भी ऑफर करता है कैसे क्रैश लॉग Xcode का प्रतीक है? java.lang.IllegalArgumentException: अवैध <url-pattern> सर्वलेट मैपिंग में कैसे "datetime.datetime नहीं JSON serializable" को दूर करने के लिए? क्रॉस-प्लेटफ़ॉर्म मोबाइल विकास पर क्या काम किया गया है?

जावास्क्रिप्ट से ASP.NET फ़ंक्शन कॉल करें?

मैं एएसपी.नेट में एक वेब पेज लिख रहा हूं मेरे पास कुछ जावास्क्रिप्ट कोड है, और मेरे पास एक क्लिक ईवेंट के साथ एक सबमिट बटन है।

क्या जावास्क्रिप्ट के क्लिक ईवेंट के साथ एएसपी में बनाई गई विधि को कॉल करना संभव है?

वेब के समाधान से एकत्रित समाधान "जावास्क्रिप्ट से ASP.NET फ़ंक्शन कॉल करें?"

ठीक है, अगर आप इसे अजाक्स या अन्य किसी तरह का उपयोग नहीं करना चाहते हैं और सिर्फ एक सामान्य एएसपी.NET पोस्टबैक करना चाहते हैं, तो यह है कि आप इसे कैसे करते हैं (किसी भी अन्य पुस्तकालयों का उपयोग किए बिना):

यह थोड़ा मुश्किल है हालांकि … 🙂

मैं। आपके कोड फ़ाइल में (यह सोचते हुए कि आप सी # और .NET 2.0 या बाद के संस्करण का प्रयोग कर रहे हैं) अपने पृष्ठ वर्ग में निम्न इंटरफेस को यह देखने के लिए जोड़ें

public partial class Default : System.Web.UI.Page, IPostBackEventHandler{} 

ii। यह आपके कोड फ़ाइल में (फ़ंक्शन टैबटैब का उपयोग करके) जोड़ना चाहिए:

 public void RaisePostBackEvent(string eventArgument) { } 

iii। जावास्क्रिप्ट में अपने ऑनक्लिक इवेंट में, निम्न कोड लिखें:

 var pageId = '<%= Page.ClientID %>'; __doPostBack(pageId, argumentString); 

यह आपके कोड फ़ाइल में 'राइसेपोस्टबैकइवेंट' विधि को 'इवेंटआर्ग्रीमेंट' के साथ 'जावास्क्रिप्ट' से पारित 'तर्कस्ट्रिंग' के रूप में कॉल करेगा। अब, आप किसी भी अन्य ईवेंट को आप कॉल कर सकते हैं।

पुनश्च: यह 'अंडरस्कोर- अंडरस्कोर-डू पोस्टबैक' है … और, उस क्रम में कोई जगह नहीं होनी चाहिए … किसी तरह डब्लूएमडी मुझे एक चरित्र के बाद अंडरस्कोर लिखने की इजाजत नहीं देता!

__doPostBack() विधि अच्छी तरह से काम करती है

एक अन्य समाधान (बहुत हैश) केवल अपने मार्कअप में एक अदृश्य एएसपी बटन जोड़ने और एक जावास्क्रिप्ट विधि के साथ इसे क्लिक करने के लिए है।

 <div style="display: none;"> <asp:Button runat="server" ... OnClick="ButtonClickHandlerMethod" /> </div> 

अपने जावास्क्रिप्ट से, उसके क्लाइंटआईडी का उपयोग करके बटन को संदर्भ पुनः प्राप्त करें और उसके बाद .click () विधि को कॉल करें।

 var button = document.getElementById(/* button client id */); button.click(); 

माइक्रोसॉफ्ट AJAX लाइब्रेरी यह पूरा करेगा आप अपने खुद के समाधान भी बना सकते हैं जिसमें एजेएक्स का प्रयोग करना शामिल है, जो अपने एसपीएक्स (मूल रूप से) स्क्रिप्ट फाइलों को एनआईटी फ़ंक्शन को चलाने के लिए कॉल करता है।

मैं Microsoft AJAX लाइब्रेरी का सुझाव देता हूं एक बार स्थापित और संदर्भित, आप सिर्फ अपने पेज लोड या init में एक पंक्ति जोड़ें:

 Ajax.Utility.RegisterTypeForAjax(GetType(YOURPAGECLASSNAME)) 

तो आप इस तरह से काम कर सकते हैं:

 <Ajax.AjaxMethod()> _ Public Function Get5() AS Integer Return 5 End Function 

उसके बाद, आप इसे अपने पृष्ठ पर कॉल कर सकते हैं:

 PageClassName.Get5(javascriptCallbackFunction); 

आपके फ़ंक्शन कॉल के अंतिम पैरामीटर को जावास्क्रिप्ट कॉलबैक फ़ंक्शन होना चाहिए, जो AJAX अनुरोध लौटाए जाने पर निष्पादित होगा।

आप इसे एसिंक्रोनस एनएटी एज़ैक्स पेजमॉसेस का उपयोग कर सकते हैं। यहां या यहां देखें

माइक्रोसॉफ्ट AJAX लाइब्रेरी यह पूरा करेगा आप अपने खुद के समाधान भी बना सकते हैं जिसमें एजेएक्स का प्रयोग करना शामिल है, जो अपने एसपीएक्स (मूल रूप से) स्क्रिप्ट फाइलों को एनआईटी फ़ंक्शन को चलाने के लिए कॉल करता है।

यह अजाक्सप्रो नामक पुस्तकालय है जिसे माइकल श्वार्ज़ नामक एक एमवीपी लिखा गया था। यह पुस्तकालय माइक्रोसॉफ्ट द्वारा नहीं लिखा गया था

मैंने बड़े पैमाने पर AjaxPro का उपयोग किया है, और यह एक बहुत अच्छी लाइब्रेरी है, मैं सर्वर पर सामान्य कॉलबैक के लिए सुझाऊंगा। यह कोई समस्या नहीं के साथ अजाक्स के माइक्रोसॉफ्ट संस्करण के साथ अच्छी तरह से काम करता है हालांकि, मैं नोट करता हूं कि माइक्रोसॉफ्ट ने कितना आसान अजाक्स बनाया है, अगर मैं वास्तव में जरूरी है कुछ सचमुच जटिल कार्यक्षमता करने के लिए बहुत सी JavaScript लेता है जो आपको माइक्रोसॉफ्ट से एक अपडेट पैनल में छोड़कर मिलता है।

स्थिर, दृढ़तापूर्वक टाइपिंग प्रोग्रामिंग हमेशा मेरे लिए बहुत ही स्वाभाविक महसूस करते हैं, इसलिए पहले जब मैंने अपने अनुप्रयोगों के लिए वेब आधारित फ्रंट-एंड का निर्माण किया था, तो मैंने जावास्क्रिप्ट सीखने का विरोध किया (HTML और CSS का उल्लेख नहीं किया)। मैं इस तरह के आसपास काम करने के लिए कुछ भी करने के लिए एक पेज पर रीडायरेक्ट करने के लिए बस प्रदर्शन और OnLoad घटना पर कार्रवाई करेंगे, जब तक मैं कोड शुद्ध सी # सकता।

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

मेरी सलाह है कि कुछ मूल जावास्क्रिप्ट (कैसे रजिस्टर करें, डॉम ऑब्जेक्ट्स को पुनः प्राप्त करें, सीएसएस को हेरफेर करने के लिए, इत्यादि) और आप वेब प्रोग्रामिंग को और अधिक मनोरंजक (आसान का उल्लेख नहीं करने के लिए) सीखेंगे। बहुत सारे लोगों ने अजाक्स पुस्तकालयों का उल्लेख किया है, लेकिन मुझे कोई वास्तविक अजाक्स उदाहरण नहीं मिला है, इसलिए ये यहां जाता है। (यदि आप अजाक्स से परिचित नहीं हैं, तो यह सभी, पूरे पेज को फिर से लोड किए बिना या एक पूर्ण पोस्टबैक के बिना सामग्री को रीफ्रेश करने के लिए एक एसिंक्रोनस HTTP अनुरोध कर रहा है (या शायद आपके परिदृश्य में सर्वर-साइड एक्शन करना)।

ग्राहक की ओर:

 <script type="text/javascript"> var xmlhttp = new XMLHttpRequest(); // Create object that will make the request xmlhttp.open("GET", "http://example.org/api/service", "true"); // configure object (method, URL, async) xmlhttp.send(); // Send request xmlhttp.onstatereadychange = function() { // Register a function to run when the state changes, if the request has finished and the stats code is 200 (OK). Write result to <p> if (xmlhttp.readyState == 4 && xmlhttp.statsCode == 200) { document.getElementById("resultText").innerHTML = xmlhttp.responseText; } }; </script> 

बस। हालांकि नाम भ्रामक हो सकता है, सादे पाठ या JSON में भी हो सकता है, आप XML तक सीमित नहीं हैं jQuery अजाक्स कॉल्स बनाने के लिए एक सरल इंटरफ़ेस प्रदान करता है (अन्य JavaScript कार्यों को आसान बनाने के बीच)

अनुरोध एक HTTP-POST या HTTP-GET हो सकता है और किसी वेबपेज पर नहीं होना पड़ता है, लेकिन आप किसी भी ऐसी सेवा के लिए पोस्ट कर सकते हैं जो HTTP अनुरोधों जैसे कि रीस्टाल्ट एपीआई के लिए सुनता है। एएसपी.नेट एमवीसी 4 वेब एपीआई सर्वर-साइड वेब सेवा को एक हवा के अनुरोध को संभालने के लिए भी सेट करता है। लेकिन बहुत से लोग नहीं जानते कि आप वेब प्रोजेक्ट प्रोजेक्ट में एपीआई कंट्रोलर्स भी जोड़ सकते हैं और इस तरह अजाक्स कॉल्स को संभालने के लिए उनका इस्तेमाल कर सकते हैं।

सर्वर साइड:

 public class DataController : ApiController { public HttpResponseMessage<string[]> Get() { HttpResponseMessage<string[]> response = new HttpResponseMessage<string[]>( Repository.Get(true), new MediaTypeHeaderValue("application/json") ); return response; } } 

Global.asax

तो बस अपने वैश्विक.एएसएक्स फ़ाइल में HTTP मार्ग को पंजीकृत करें, इसलिए एएसपी.एन.टी. को पता होगा कि अनुरोध कैसे निर्देशित किया जाए।

 void Application_Start(object sender, EventArgs e) { RouteTable.Routes.MapHttpRoute("Service", "api/{controller}/{id}"); } 

एजेएक्स और कंट्रोलर्स के साथ, आप किसी भी समय किसी भी सर्वर साइड ऑपरेशन को निष्पादित करने के लिए किसी भी समय सर्वर पर वापस पोस्ट कर सकते हैं। यह एक-दो पंच, जावास्क्रिप्ट की लचीलेपन और सी # / एएसपी.नेट को शक्ति देता है, जिससे लोगों को अपनी साइट पर एक बेहतर समग्र अनुभव मिल रहा है। कुछ भी बलिदान के बिना, आप दोनों दुनिया का सर्वश्रेष्ठ प्राप्त करें

संदर्भ

  • अजाक्स ,
  • jQuery अजाक्स ,
  • वेबफॉर्म में नियंत्रक

मुझे लगता है कि ब्लॉग पोस्ट अजाक्स (jQuery) का उपयोग कर एएसपी.नेट पृष्ठ में एसक्यूएल सर्वर डाटाबेस को लाने और दिखाने का तरीका आपकी मदद करेगा।

जावास्क्रिप्ट कोड

 <script src="http://code.jquery.com/jquery-1.9.1.js"></script> <script language="javascript" type="text/javascript"> function GetCompanies() { $("#UpdatePanel").html("<div style='text-align:center; background-color:yellow; border:1px solid red; padding:3px; width:200px'>Please Wait...</div>"); $.ajax({ type: "POST", url: "Default.aspx/GetCompanies", data: "{}", dataType: "json", contentType: "application/json; charset=utf-8", success: OnSuccess, error: OnError }); } function OnSuccess(data) { var TableContent = "<table border='0'>" + "<tr>" + "<td>Rank</td>" + "<td>Company Name</td>" + "<td>Revenue</td>" + "<td>Industry</td>" + "</tr>"; for (var i = 0; i < data.d.length; i++) { TableContent += "<tr>" + "<td>"+ data.d[i].Rank +"</td>" + "<td>"+data.d[i].CompanyName+"</td>" + "<td>"+data.d[i].Revenue+"</td>" + "<td>"+data.d[i].Industry+"</td>" + "</tr>"; } TableContent += "</table>"; $("#UpdatePanel").html(TableContent); } function OnError(data) { } </script> 

ASP.NET सर्वर साइड फंक्शन

 [WebMethod] [ScriptMethod(ResponseFormat= ResponseFormat.Json)] public static List<TopCompany> GetCompanies() { System.Threading.Thread.Sleep(5000); List<TopCompany> allCompany = new List<TopCompany>(); using (MyDatabaseEntities dc = new MyDatabaseEntities()) { allCompany = dc.TopCompanies.ToList(); } return allCompany; } 

यदि आप किसी सर्वर-साइड इवेंट हैंडलर को ट्रिगर करना चाहते हैं, तो दोनों परिदृश्यों (जो कि, तुल्यकालिक / असिंक्रोनस) के लिए बहुत आसान है, उदाहरण के लिए, बटन का क्लिक ईवेंट।

नियंत्रण के एक ईवेंट हैंडलर को ट्रिगर करने के लिए: अगर आपने पहले ही अपने पृष्ठ पर एक स्क्रिप्ट मैनेजर जोड़ा था तो चरण 1 को छोड़ दें

  1. अपने पृष्ठ क्लाइंट स्क्रिप्ट अनुभाग में निम्न जोड़ें

     //<![CDATA[ var theForm = document.forms['form1']; if (!theForm) { theForm = document.form1; } function __doPostBack(eventTarget, eventArgument) { if (!theForm.onsubmit || (theForm.onsubmit() != false)) { theForm.__EVENTTARGET.value = eventTarget; theForm.__EVENTARGUMENT.value = eventArgument; theForm.submit(); } } //]]> 
    1. अपने नियंत्रण के लिए आपको सर्वर साइड ईवेंट हैंडलर लिखें

      संरक्षित शून्य btnSayHello_Click (ऑब्जेक्ट प्रेषक, EventArgs ई) {Label1.Text = "हैलो वर्ल्ड …"; }

    2. सर्वर साइड ईवेंट हैंडलर को कॉल करने के लिए क्लाइंट फ़ंक्शन जोड़ें

      समारोह सेहेलो () {__do ​​पोस्टबैक ("बीटीएनसेहेलो", ""); }

अपने नियंत्रण के क्लाइंट आईडी से ऊपर कोड में "बीटीएनएसेहेल्लो" को बदलें

ऐसा करने से, यदि आपका नियंत्रण अपडेट पैनल के अंदर है, तो पृष्ठ रीफ्रेश नहीं करेगा। यह इतना आसान है

एक और बात यह है कि क्लाइंट आईडी के साथ सावधान रहें, क्योंकि यह आपके द्वारा आईडी-पीढ़ी नीति पर निर्भर करता है जो क्लाइंटआईडोडोड संपत्ति के साथ परिभाषित है।

आप अपने सामान्य तरीकों के लिए एक वेब सेवा बना सकते हैं।
सिर्फ उन कार्यों पर WebMethodAttribute जोड़ें जिन्हें आप कॉल करना चाहते हैं, और इसके बारे में है।
आपके सभी सामान्य सामान के साथ एक वेब सेवा रखने से सिस्टम को बनाए रखने में भी आसान हो जाता है

यदि __do पोस्टबैक फ़ंक्शन पृष्ठ पर उत्पन्न नहीं है, तो आपको इसे इस तरह लागू करने के लिए एक नियंत्रण डालने की आवश्यकता है:

 <asp:Button ID="btnJavascript" runat="server" UseSubmitBehavior="false" /> 

मैं इसे लागू करने की कोशिश कर रहा हूं लेकिन यह सही काम नहीं कर रहा है। पृष्ठ वापस पोस्ट कर रहा है, लेकिन मेरा कोड निष्पादित नहीं हो रहा है जब मैं पृष्ठ को डीबग करता हूं, तो राइज़पोस्टबैकइवेंट को कभी नहीं निकाल दिया जाता है। एक बात जो मैंने अलग ढंग से की थी मैं एक एस्प्क्स पेज के बजाय उपयोगकर्ता नियंत्रण में यह कर रहा हूं।

यदि किसी और को मर्क की तरह है, और इसे आने में परेशानी हो रही है, तो मेरे पास एक समाधान है:

जब आपके पास उपयोगकर्ता नियंत्रण होता है, तो आपको लगता है कि आपको माता-पिता के पृष्ठ में पोस्टबैक एवेंटहैंडल भी बनाना चाहिए। और फिर आप इसे सीधे कॉल करके उपयोगकर्ता नियंत्रण के पोस्टबैकएवेंटहैंडलर का उपयोग कर सकते हैं। निचे देखो:

 public void RaisePostBackEvent(string _arg) { UserControlID.RaisePostBackEvent(_arg); } 

जहां UserControlID आईडी है, जब आपने मार्कअप में इसे नेस्टेड किया था, तो आपने मूल पृष्ठ पर उपयोगकर्ता नियंत्रण प्रदान किया था।

नोट: आप सीधे उस उपयोगकर्ता नियंत्रण से जुड़े तरीकों को सीधे कॉल कर सकते हैं (इस मामले में, आपको केवल माता-पिता पृष्ठ में राइसेपोस्टबैक एवेंट हैंन्डलर की आवश्यकता होगी):

 public void RaisePostBackEvent(string _arg) { UserControlID.method1(); UserControlID.method2(); } 

के बारे में:

 var button = document.getElementById(/* Button client id */); button.click(); 

ऐसा होना चाहिए:

 var button = document.getElementById('<%=formID.ClientID%>'); 

जहां formID। Aspx फ़ाइल में ASP.NET नियंत्रण आईडी है I

यदि आपको ऑब्जेक्ट अपेक्षित त्रुटि मिल रही है तो इस लाइन को पेज लोड में जोड़ें

 ClientScript.GetPostBackEventReference(this, ""); 

यह उत्तर मेरे लिए क्रॉस ब्राउज़र के लिए एक हवा की तरह काम करता है:

__do पोस्टबैक () विधि अच्छी तरह से काम करती है

एक अन्य समाधान (बहुत हैश) केवल अपने मार्कअप में एक अदृश्य एएसपी बटन जोड़ने और एक जावास्क्रिप्ट विधि के साथ इसे क्लिक करने के लिए है।

 <div style="display: none;"> <asp:Button runat="server" ... OnClick="ButtonClickHandlerMethod" /> </div> 

अपने जावास्क्रिप्ट से, उसके क्लाइंटआईडी का उपयोग करते हुए बटन के संदर्भ को पुनः प्राप्त करें और उसके बाद कॉल करें। उस पर क्लिक करें () विधि:

 var button = document.getElementByID(/* button client id */); button.Click(); 

Blockquote

आप सी # विधियों या VB.NET विधियों को जावास्क्रिप्ट में एक्सेस करने के लिए PageMethods.Your C# method Name उपयोग कर सकते हैं।

इसे इस्तेमाल करे:

 if(!ClientScript.IsStartupScriptRegistered("window")) { Page.ClientScript.RegisterStartupScript(this.GetType(), "window", "pop();", true); } 

या यह

 Response.Write("<script>alert('Hello World');</script>"); 

JavaScript कार्यों को कॉल करने के लिए बटन की OnClientClick संपत्ति का उपयोग करें …

आप यह रेखा को अपने जावास्क्रिप्ट कोड में जोड़कर भी प्राप्त कर सकते हैं:

 document.getElementById('<%=btnName.ClientID%>').click() 

मुझे लगता है कि यह एक बहुत आसान है!

कृपया यह प्रयास करें:

 <%= Page.ClientScript.GetPostBackEventReference(ddlVoucherType, String.Empty) %>; 

ddlVoucherType एक नियंत्रण है, जिसे चयनित इंडेक्स परिवर्तन कॉल करेगा … और आप इस नियंत्रण के चयनित सूचकांक परिवर्तन पर कोई भी कार्य डाल सकते हैं।

इसे प्राप्त करने का सबसे आसान और सबसे अच्छा तरीका onmouseup() जावास्क्रिप्ट ईवेंट का उपयोग करने के बजाय onclick()

इस तरह आप जावास्क्रिप्ट को क्लिक करने के बाद आग लगाएंगे और यह एएसपी OnClick() इवेंट के साथ हस्तक्षेप नहीं करेगा।

मैं यह कोशिश करता हूं और इसलिए jQuery का उपयोग करते हुए मैं एक asp.Net विधि चला सकता हूं।

  1. एक पृष्ठ अपने jQuery कोड में रीडायरेक्ट करें

     window.location = "Page.aspx?key=1"; 
  2. फिर पेज लोड में क्वेरी स्ट्रिंग का उपयोग करें

     protected void Page_Load(object sender, EventArgs e) { if (Request.QueryString["key"] != null) { string key= Request.QueryString["key"]; if (key=="1") { // Some code } } } 

इसलिए कोई अतिरिक्त कोड चलाने की आवश्यकता नहीं है