एएसपी.Net में सुविधाओं में से एक क्लाइंट-साइड कोड से क्लाइंट-साइड कोड से क्लाइंट कॉलबैक नामक किसी चीज़ का उपयोग करके कॉल करने की क्षमता है। मुझे अब तक मिली कुछ छोटी सी चेतावनियां मिली हैं: -
- यह XmlHttp का उपयोग करता है जो इस समय केवल आईई है। फ़ायरफ़ॉक्स और अन्य ब्राउज़रों के पास एक विकल्प है, लेकिन कॉलबैक इसका उपयोग कर रहे हैं।
- केवल प्रकार आप सर्वर से लौट सकते हैं एक स्ट्रिंग है (लेकिन हम उस के आसपास यदि आवश्यक हो तो serializing से प्राप्त कर सकते हैं)
उदाहरण मैं का उपयोग किया है वह जगह है जहाँ मैं दो संबंधित बक्सें होने की जरूरत है कि है सिंक में रखा गया। यदि क्लाइंट आईडी बॉक्स बदल दिया गया है, तो क्लाइंटनाम बॉक्स को उस क्लाइंट का नाम प्रदर्शित करना चाहिए जिसमें वह आईडी है, और इसके विपरीत।
public partial class WebForm1 : System.Web.UI.Page, ICallbackEventHandler
इसके बाद, मैं अपने aspx.cs में Page_Load विधि में मेरी कॉलबैक तरीकों रजिस्टर: - -:
इस कार्यक्षमता का उपयोग कर, अपने सुनिश्चित प्रारंभ करने के लिए कोड-पीछे ICallbackEventHandler इंटरफ़ेस लागू करता
// Set up client callbacks. These allow client-side scripts to call
// server-side functions and retrieve the results. Its a string-only
// return I'm afraid, limited by the ICallbackEventHandler method signatures
txtClientID.Attributes.Add("onchange", "GetClientNameById('id|' + this.value, 'id');");
string callBackClientID = Page.ClientScript.GetCallbackEventReference(this, "arg", "ClientNameCallback", "context", "ClientNameCallbackError", true);
string clientIDfunction = "function GetClientNameById(arg,context) { " + callBackClientID + "; }";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "GetClientNameById", clientIDfunction, true);
txtClientName.Attributes.Add("onchange", "GetClientIdByName('name|' + this.value, 'name');");
string callBackClientName = Page.ClientScript.GetCallbackEventReference(this, "arg", "ClientIdCallback", "context", "ClientIdCallbackError", true);
string clientNamefunction = "function GetClientIdByName(arg, context) { " + callBackClientName + "; }";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "GetClientIdByName", clientNamefunction, true);
यह सर्वर के साथ पेज फ़ंक्शंस को पंजीकृत करता है और क्लाइंट कॉलबैक विधियों तक उन्हें हुक करता है - ये कॉलबैक विधियां मूल प्लेसहोल्डर्स हैं जो कुछ भी नहीं करती हैं लेकिन सर्वर को अपनी स्ट्रिंग को वापस करने के लिए कहीं भी देती हैं। तो aspx पेज पर ही: -
<script type="text/javascript">
function ClientNameCallback(result, context)
{
//sorry about the hardcoded element name...
if(result != "")
document.getElementById('ctl00_ContentPlaceHolder1_txtClientName').setAttribute('value',result);
}
function ClientIdCallback(result,context)
{
//sorry about the hardcoded element name...
if(result != "")
document.getElementById('ctl00_ContentPlaceHolder1_txtClientID').setAttribute('value',result);
}
function ClientNameCallbackError(result, context)
{
//Not sure what error is likely to arise at this point, but...
alert('Error in client name callback function - please say that to eSolutions!');
}
function ClientIdCallbackError(result, context)
{
//Not sure what error is likely to arise at this point, but...
alert('Error in client id callback function - please say that to eSolutions!');
}
</script>
अंत में, हम आवश्यक ICallbackEventHandler, जो सर्वर साइड प्रसंस्करण शामिल लागू हम करना चाहते: -
string ICallbackEventHandler.GetCallbackResult()
{
return callbackReturnValue;
}
void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
{
// eventArgument should be in format field|value,
// e.g., "id|30102" or "name|test client"
// This is because of the "single string" limitations
// of the callback interface
if(eventArgument.StartsWith("name"))
{
//....do lookup to get the id based on the name, from an array or database, or whatever
callbackReturnValue = <string we want to pass back to client-side
}
else if(eventArgument.StartsWith("id"))
आदि आदि
:
तो, अपने खिलौना उदाहरण में अगर आप एक AJAX अनुरोध करने के लिए अलग तरीके से प्रतिक्रिया करना चाहता था यह अच्छी तरह से काम करता है। बहुत धन्यवाद। मैंने एक अलग पृष्ठ बनाया जो वास्तव में वही देता है जो मैं ढूंढ रहा हूं। बहुत धन्यवाद।यद्यपि यह एक अक्षम विधि की तरह दिखता है, जो मैंने अन्य उत्तरों से जो पढ़ा है उसके आधार पर। बहुत धन्यवाद! –
हाँ आदर्श रूप से आप एएसपी मार्कअप आदि में अपना पेज बनायेंगे, यह सिर्फ एक त्वरित उदाहरण था। अन्य लोगों ने भी कहा है कि, एएसपी.नेट एजेक्स हैंडलिंग वास्तव में सभ्य और मृत सरल है (आपको एक अलग पृष्ठ या अलग कोड की भी आवश्यकता नहीं है) - या jQuery क्लाइंट-साइड के लिए समान रूप से शानदार है, लेकिन जैसा आपने कहा था एक सीखने का अभ्यास था। –