CodeBehind से जावास्क्रिप्ट फ़ंक्शन को कॉल करना


150

क्या कोई CodeBehind से एक जावास्क्रिप्ट फ़ंक्शन को कॉल करने के अच्छे उदाहरण दे सकता है और इसके विपरीत?


यहाँ विस्तृत लेख codepedia.info// अजाक्स अपडेट पैनल के साथ और उसके बिना उपयोग किया जा रहा है
सतिंदर सिंह

जवाबों:


206

आप यह कोशिश कर सकते हैं:

Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);

41
मैं ScriptManager.RegisterStartupScript (पेज, टाइपोफ़ (पेज), "somekey", स्क्रिप्ट, सच) के लिए जाऊंगा; दृष्टिकोण। यह आंशिक पोस्टबैक के दौरान भी काम करता है।
rdmptn

10
1. कभी-कभी Page.ClientScript.RegisterClientScriptBlockआवश्यक है इसके बजाय जानकारी के लिए इस पोस्ट को देखें । 2. यह ध्यान देने योग्य हो सकता है कि MyFunction () को काम करने के लिए, MyFunction () को फॉर्म टैग या उनके अंदर परिभाषित किया जाना चाहिए, लेकिन </ form> एंडिंग टैग के बाद (अन्यथा ऑब्जेक्ट अपेक्षित त्रुटि नहीं होगी) होते हैं)
बोर्नटोडकोड

2
ScriptManager.RegisterStartupScript(this.Page, typeof(Page), "text", "openDep()", true);काम करता है। this.GetType()मेरे लिए एक त्रुटि फेंकता है।
SearchForKnowledge

2
यह तब काम नहीं करता है जब कोड asp:UpdatePanelएक बटन के साथ लिपटे और लिखा हो। जिसके कारण पृष्ठ पोस्टबैक हो जाता है।
सेनुरा डिसानानेक

52

C # से JavaScript: आप निम्न की तरह पेज पर चलाने के लिए स्क्रिप्ट ब्लॉक रजिस्टर कर सकते हैं:

ClientScript.RegisterStartupScript(GetType(),"hwa","alert('Hello World');",true);

alert()अपने फ़ंक्शन नाम के साथ भाग बदलें ।

जावास्क्रिप्ट से C # विधि को कॉल करने के लिए आप उपयोग ScriptManagerया कर सकते हैं jQuery। मैं व्यक्तिगत रूप से उपयोग करता हूं jQuery। आपको उस विधि को सजाने की ज़रूरत है जिसे आप जावास्क्रिप्ट से WebMethodविशेषता के साथ कॉल करना चाहते हैं । आपके द्वारा C # विधि (कॉल PageMethod) के संबंध में अधिक जानकारी के jQueryलिए डेव वार्ड के पद का संदर्भ ले सकते हैं ।


51

पीछे से कोड से एक जावास्क्रिप्ट फ़ंक्शन को कॉल करना

चरण 1 अपने जावास्क्रिप्ट कोड जोड़ें

<script type="text/javascript" language="javascript">
    function Func() {
        alert("hello!")
    }
</script>

चरण 2 अपने वेबफार्म में 1 स्क्रिप्ट मैनेजर जोड़ें और 1 बटन भी जोड़ें

स्टेप 3 इस कोड को अपने बटन क्लिक ईवेंट में जोड़ें

ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Func()", true);

जब GridView पंक्ति क्लिक की जाती है तो ऐसा करने का प्रयास करते समय, यह केवल ScriptManagerइस उत्तर में उपयोग करते समय काम करता है , Page.ClientScriptअन्य उत्तरों की तरह नहीं। asp:UpdatePanelस्वीकृत उत्तर के तहत टिप्पणी से संबंधित हो सकता है ।
क्रिस

16

आप सीधे यह नहीं कर सकते। मानक WebForms में जावास्क्रिप्ट की व्याख्या ब्राउज़र और सर्वर द्वारा C # की जाती है। आप जावास्क्रिप्ट का उपयोग करके सर्वर से एक विधि को कॉल करने के लिए क्या कर सकते हैं।

  • का प्रयोग करें WebMethodके रूप में attributeलक्ष्य के तरीकों में।
  • के रूप में ScriptManagerसेटिंग जोड़ें ।EnablePageMethodstrue
  • ऑब्जेक्ट के माध्यम से कॉल करने के लिए जावास्क्रिप्ट कोड जोड़ें PageMethods

ऐशे ही:

चरण 1

public partial class Products : System.Web.UI.Page 
{ 
    [System.Web.Services.WebMethod()] 
    [System.Web.Script.Services.ScriptMethod()] 
    public static List<Product> GetProducts(int cateogryID) 
    {
        // Put your logic here to get the Product list 
    }

चरण 2: एक जोड़ा जा रहा है ScriptManagerपरPage

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />

चरण 3: जावास्क्रिप्ट का उपयोग करके विधि को कॉल करना

function GetProductsByCategoryID(categoryID)
{
    PageMethods.GetProducts(categoryID, OnGetProductsComplete);
}

इस लिंक पर एक नज़र डालें।

सर्वर से एक जावास्क्रिप्ट फ़ंक्शन को कॉल करने के लिए जिसका आप उपयोग कर सकते हैं RegisterStartupScript:

ClientScript.RegisterStartupScript(GetType(),"id","callMyJSFunction()",true);

आप MVC 3 फ़ाइल पदानुक्रम में चरण एक को कहां रखते हैं?
रोब

@Rob GetProducts()फ़ंक्शन केवल एक कोड-पीछे फ़ंक्शन है जो MVC ऐप में एक नियंत्रक में रहता है, इसलिए टैग जो भी फ़ंक्शन आप एक नियंत्रक में रखना चाहते हैं, उसके ऊपर जाते हैं जिसे आप जावास्क्रिप्ट से कॉल करना चाहते हैं। ।
वाप्गुगी

15

यदि आपको एक पैरामीटर के रूप में एक मूल्य भेजने की आवश्यकता है।

string jsFunc = "myFunc(" + MyBackValue + ")";
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "myJsFn", jsFunc, true);

8

एक और चीज जो आप कर सकते हैं, वह है सत्र चर बनाना जो पीछे दिए गए कोड में सेट हो जाता है और फिर उस चर की स्थिति की जाँच करें और फिर अपनी जावास्क्रिप्ट चलाएँ। अच्छी बात यह है कि आप अपनी स्क्रिप्ट को वहीं चलाने की अनुमति देंगे, जहाँ आप यह जानना चाहते हैं कि क्या आप चाहते हैं कि यह DOM या विश्व स्तर पर चले।

कुछ इस तरह: पीछे कोड:

Session["newuser"] = "false" 

जावास्क्रिप्ट में

var newuser = '<%=Session["newuser"]%>';
 if (newuser == "yes")
     startTutorial();  

7

आप नहीं कर सकते। कोडबाइंड सर्वर पर चल रहा है जबकि जावास्क्रिप्ट क्लाइंट पर चल रहा है।

हालाँकि, आप <script type="text/javascript">someFunction();</script>अपने आउटपुट में जोड़ सकते हैं और इस तरह जेएस फ़ंक्शन को तब बुलाया जा सकता है जब ब्राउज़र आपके मार्कअप को पार्स कर रहा है।


65
"आप नहीं कर सकते। लेकिन यहाँ है कि आप इसे कैसे करते हैं।"

3
मैं इस बात पर विचार नहीं करूंगा कि आपके पास रिटर्न वैल्यू पाने या कॉलबैक निर्दिष्ट करने का वास्तविक तरीका न होने के कारण सर्वर-साइड कोड से एक विधि को कॉल करना।
ThiefMaster

8
अजी, यकीन है कि आप कर सकते हैं आप अपनी जावास्क्रिप्ट या AJAX से कुछ भी वापस लेकर पोस्टबैक कह सकते हैं। मैंने सोचा यह हास्यास्पद था; मैं एक ही काम करता हूं - "नहीं, यह असंभव है। कोई भी ऐसा नहीं चाहेगा कि अगर वे कर सकें।" फिर कुछ मिनट बाद "तो यहाँ है कि हम यह कैसे करने जा रहे हैं।"

7

आप शाब्दिक उपयोग कर सकते हैं:

this.Controls.Add(new LiteralControl("<script type='text/javascript'>myFunction();</script>"));

1
लेकिन यह सिर्फ एक स्क्रिप्ट को स्मृति में नहीं जोड़ता है, यह वास्तव में इसे भी नहीं चलाता है?
Fandango68

5

IIRC कोड के पीछे सर्वराइड संकलित किया गया है और जावास्क्रिप्ट को ग्राहक पक्ष की व्याख्या की गई है। इसका मतलब है कि दोनों के बीच कोई सीधा संबंध नहीं है।

दूसरी ओर आप जो कर सकते हैं वह है AJAX नामक निफ्टी टूल के माध्यम से क्लाइंट और सर्वर संवाद। http://en.wikipedia.org/wiki/Asynchronous_JavaScript_and_XML


5

कोड के पीछे यह कोशिश करो और यह 100% काम करेगा

कोड की इस पंक्ति को आप फ़ाइल के पीछे कोड में लिखें

string script = "window.onload = function() { YourJavaScriptFunctionName(); };";
ClientScript.RegisterStartupScript(this.GetType(), "YourJavaScriptFunctionName", script, true);

और यह वेब फॉर्म पेज है

<script type="text/javascript">
    function YourJavaScriptFunctionName() {
        alert("Test!")
    }
</script>


4

काम करने का उदाहरण: _

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage2.Master" AutoEventWireup="true" CodeBehind="History.aspx.cs" Inherits="NAMESPACE_Web.History1" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
    <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajax" %>


 <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> 

        <script type="text/javascript">

            function helloFromCodeBehind() {
                alert("hello!")
            }


        </script>

</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">

 <div id="container"  ></div>

</asp:Content>

कोड के पीछे

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace NAMESPACE_Web
{
    public partial class History1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            ScriptManager.RegisterStartupScript(this, GetType(), "displayalertmessage", "helloFromCodeBehind()", true);
        }

    }
}

संभावित नुकसान: -

  1. कोड और HTML समान नामस्थान में नहीं हो सकते हैं
  2. CodeBehind="History.aspx.cs" गलत पृष्ठ की ओर इशारा कर रहा है
  3. जेएस फ़ंक्शन में कुछ त्रुटि है

3

मैं यहाँ बहुत सारे उत्तरों का उल्लेख कर रहा हूँ ScriptManager.RegisterStartupScriptऔर यदि आप ऐसा करने जा रहे हैं, तो यह सही तरीका नहीं है। सही तरीका उपयोग करना है ScriptManager.RegisterScriptBlock([my list of args here])। कारण यह है कि जब आपका पेज लोड होता है (इसलिए नाम RegisterStartupScript नाम), तो आपको केवल RegisterStartupScript का उपयोग करना चाहिए।

VB.NET में:

ScriptManager.RegisterClientScriptBlock(Page, GetType(String), "myScriptName" + key, $"myFunctionName({someJavascriptObject})", True)

C # में:

ScriptManager.RegisterClientScriptBlock(Page, typeof(string), "myScriptName" + key, $"myFunctionName({someJavascriptObject})", true);

बेशक, मुझे आशा है कि यह बिना कहे चला जाता है कि आपको अपने प्रमुख पहचानकर्ता के साथ कुंजी को बदलने की आवश्यकता है और संभवतः यह सब एक उप / फ़ंक्शन / विधि में स्थानांतरित करना चाहिए और कुंजी और someJavascriptObject में पास होना चाहिए (यदि आपकी जावास्क्रिप्ट विधि की आवश्यकता है तो आपका arg एक है जावास्क्रिप्ट वस्तु)।

MSDN डॉक्स:

https://msdn.microsoft.com/en-us/library/bb338357(v=vs.110).aspx


3
ScriptManager.RegisterStartupScript(Page, GetType(), "JavaFunction", "AlertError();", true);

अपने फ़ंक्शन का उपयोग करना पर्याप्त है


2
क्या आप अपने उत्तर को थोड़ा और समझा सकते हैं?
मैक्सपज

1
यह "JavaFunction" पैरामीटर क्या है? क्या हम इसमें कुछ भी जोड़ सकते हैं? उस तर्क में क्या होना चाहिए?
सेनुरा डिसानैकेक

1
@SenuraDissanayake यह एक शीर्षक है-हाँ, यह कुछ भी हो सकता है और वास्तव में कोई फर्क नहीं पड़ता।
vapcguy

2

यह मैंने कैसे किया है।

HTML मार्कअप एक लेबल और बटन नियंत्रण दिखाते हुए निम्नानुसार है।

<body> 
  <form id="form1" runat="server"> 
  <div> 
    <asp:Label ID="lblJavaScript" runat="server" Text=""></asp:Label> 
    <asp:Button ID="btnShowDialogue" runat="server" Text="Show Dialogue" /> 
  </div> 
  </form> 
</body>

जावास्क्रिप्ट समारोह यहाँ है।

<head runat="server"> 
  <title>Calling javascript function from code behind example</title> 
  <script type="text/javascript"> 
    function showDialogue() { 
      alert("this dialogue has been invoked through codebehind."); 
    } 
  </script> 
</head>

जावास्क्रिप्ट फ़ंक्शन को ट्रिगर करने के लिए कोड यहाँ है।

lblJavaScript.Text = "<script type='text/javascript'>showDialogue();</script>";


1

चूंकि मुझे एक समाधान नहीं मिला जो कोड के पीछे था, जिसमें कोशिश करना शामिल है ClientScript और ScriptManagermutanic और ऑरलैंडो हेरेरा की तरह इस सवाल में कहा (वे दोनों किसी भी तरह विफल), मैं एक सामने के अंत समाधान है कि दूसरों को अगर करने के लिए बटन क्लिक का इस्तेमाल करता है प्रदान करेंगे वे मेरे जैसे ही पद पर हैं। यह मेरे लिए काम किया:

HTML मार्कअप:

<asp:button ID="myButton" runat="server" Text="Submit" OnClientClick="return myFunction();"></asp:button>

जावास्क्रिप्ट:

function myFunction() {
    // Your JavaScript code
    return false;
}

मैं बस एक ASP.NET बटन का उपयोग कर रहा हूं जो OnClientClickसंपत्ति का उपयोग करता है, जो क्लाइंट-साइड स्क्रिप्टिंग फ़ंक्शन को आग लगाता है, जो कि जावास्क्रिप्ट है। यहां ध्यान देने योग्य मुख्य बातें returnफ़ंक्शन कॉल में और फ़ंक्शन में ही कीवर्ड का उपयोग हैं । मैंने ऐसे डॉक्स पढ़े हैं जो उपयोग नहीं करते हैं returnलेकिन फिर भी काम करने के लिए बटन क्लिक करें - किसी तरह यह मेरे लिए काम नहीं करता है। return false;समारोह में बयान निर्दिष्ट करता है एक पोस्टबैक नहीं होना चाहिए। आप OnClientClickसंपत्ति में उस कथन का उपयोग भी कर सकते हैं:OnClientClick="myFunction() return false;"


0

मैंने कोड बिहाइंड में ScriptManager का इस्तेमाल किया और इसने ठीक काम किया।

ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "CallMyFunction", "confirm()", true);

यदि आप ASPPend में UpdatePanel का उपयोग कर रहे हैं। फिर, स्क्रिप्ट टैग के साथ अपडेट किया गया UpdatePanel नाम और 'फ़ंक्शन नाम' दर्ज करें।


0

धन्यवाद "लाइको", बस उसके जवाब में एक टिप्पणी जोड़ें।

string jsFunc = "myFunc(" + MyBackValue + ")";
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "myJsFn", jsFunc, true);

'चर में एकल उद्धरण ( ) जोड़े गए , अन्यथा यह त्रुटि संदेश देगा:

string jsFunc = "myFunc('" + MyBackValue + "')";

-1

आप CodeBehind से एक जावास्क्रिप्ट फ़ंक्शन को कॉल नहीं कर सकते, क्योंकि CodeBehind फ़ाइल में वह कोड होता है जो वेब सर्वर पर सर्वर साइड को निष्पादित करता है। जावास्क्रिप्ट कोड क्लाइंट की तरफ वेब ब्राउजर में निष्पादित होता है।


1
आप सीधे javascript फ़ंक्शन को myCoolJavascriptFunction (जावास्क्रिप्ट फ़र्नीचरएरग्स) के रूप में नहीं कह सकते; सर्वर पर, लेकिन आप किसी WebForms पृष्ठ के पीछे कोड से एक जावास्क्रिप्ट फ़ंक्शन को कॉल कर सकते हैं।
cr1pto

Cloudstrifebro से सहमत
खुर्रम

-1

आप ScriptMethod विशेषता का उपयोग करके जावास्क्रिप्ट के माध्यम से कॉल करने योग्य पृष्ठों पर C # विधियों को उजागर कर सकते हैं

आप एक CodeBehind से जावास्क्रिप्ट को कॉल नहीं कर सकते हैं - यह कोड केवल क्लाइंट पर मौजूद है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.