ssmsnet
ssmsnet

Reputation: 2306

Calling JavaScript Function From CodeBehind

Can someone provide good examples of calling a JavaScript function From CodeBehind and Vice-versa?

Upvotes: 172

Views: 863820

Answers (21)

Chandan Kumar
Chandan Kumar

Reputation: 221

Try This in Code Behind and it will worked 100%

Write this line of code in you Code Behind file

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

And this is the web form page

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

Upvotes: 2

Stephen
Stephen

Reputation: 115

Thank "Liko", just add a comment to his answer.

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

Added single quotes (') to variable, otherwise it will give error message:

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

Upvotes: 0

Max Voisard
Max Voisard

Reputation: 1942

Since I couldn't find a solution that was code behind, which includes trying the ClientScript and ScriptManager like mutanic and Orlando Herrera said in this question (they both somehow failed), I'll offer a front-end solution that utilizes button clicks to others if they're in the same position as me. This worked for me:

HTML Markup:

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

JavaScript:

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

I am simply using an ASP.NET button which utilizes the OnClientClick property, which fires client-side scripting functions, that being JavaScript. The key things to note here are the uses of the return keyword in the function call and in the function itself. I've read docs that don't use return but still get the button click to work - somehow it didn't work for me. The return false; statement in the function specifies a postback should NOT happen. You could also use that statement in the OnClientClick property: OnClientClick="myFunction() return false;"

Upvotes: 1

Vismari
Vismari

Reputation: 745

You can not do this directly. In standard WebForms JavaScript is interpreted by browser and C# by server. What you can do to call a method from server using JavaScript is.

Like this:

Step 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 
    }

Step 2: Adding a ScriptManager on the Page

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

Step 3: Calling the method using JavaScript

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

Take a look at this link.

To call a JavaScript function from server you can use RegisterStartupScript:

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

Upvotes: 17

Liko
Liko

Reputation: 2300

If you need to send a value as a parameter.

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

Upvotes: 18

sadist king
sadist king

Reputation: 41

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

using your function is enough

Upvotes: 3

Ravi Agrawal
Ravi Agrawal

Reputation: 87

I used ScriptManager in Code Behind and it worked fine.

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

If you are using UpdatePanel in ASP Frontend. Then, enter UpdatePanel name and 'function name' defined with script tags.

Upvotes: 0

cr1pto
cr1pto

Reputation: 549

I've been noticing a lot of the answers here are using ScriptManager.RegisterStartupScript and if you are going to do that, that isn't the right way to do it. The right way is to use ScriptManager.RegisterScriptBlock([my list of args here]). The reason being is you should only be using RegisterStartupScript when your page loads (hence the name RegisterStartupScript).

In VB.NET:

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

in C#:

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

Of course, I hope it goes without saying that you need to replace key with your key identifier and should probably move all of this into a sub/function/method and pass in key and someJavascriptObject (if your javascript method requires that your arg is a javascript object).

MSDN docs:

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

Upvotes: 4

Hitesh Sahu
Hitesh Sahu

Reputation: 45160

Working Example :_

<%@ 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>

Code Behind

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);
        }

    }
}

Possible pitfalls:-

  1. Code and HTML might not be in same namespace
  2. CodeBehind="History.aspx.cs" is pointing to wrong page
  3. JS function is having some error

Upvotes: 7

user1281573
user1281573

Reputation:

Another thing you could do is to create a session variable that gets set in the code behind and then check the state of that variable and then run your javascript. The good thing is this will allow you to run your script right where you want to instead of having to figure out if you want it to run in the DOM or globally.

Something like this: Code behind:

Session["newuser"] = "false" 

In javascript

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

Upvotes: 9

Kirk Patrick Brown
Kirk Patrick Brown

Reputation: 184

this works for me

object Json_Object=maintainerService.Convert_To_JSON(Jobitem);
ScriptManager.RegisterClientScriptBlock(this,GetType(), "Javascript", "SelectedJobsMaintainer("+Json_Object+"); ",true);

Upvotes: 1

Apps Tawale
Apps Tawale

Reputation: 675

ScriptManager.RegisterStartupScript(this, this.Page.GetType(),"updatePanel1Script", "javascript:ConfirmExecute()",true/>

Upvotes: 5

Dilip Kumar Yadav
Dilip Kumar Yadav

Reputation: 615

You can use literal:

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

Upvotes: 8

Berry Ligtermoet
Berry Ligtermoet

Reputation: 881

IIRC Code Behind is compiled serverside and javascript is interpreted client side. This means there is no direct link between the two.

What you can do on the other hand is have the client and server communicate through a nifty tool called AJAX. http://en.wikipedia.org/wiki/Asynchronous_JavaScript_and_XML

Upvotes: 5

Orlando Herrera
Orlando Herrera

Reputation: 3531

Calling a JavaScript function from code behind

Step 1 Add your Javascript code

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

Step 2 Add 1 Script Manager in your webForm and Add 1 button too

Step 3 Add this code in your button click event

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

Upvotes: 60

mutanic
mutanic

Reputation: 2488

You may try this :

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

Upvotes: 235

evaaggy
evaaggy

Reputation: 187

This is how I've done it.

HTML markup showing a label and button control is as follows.

<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>

JavaScript function is here.

<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>

Code behind to trigger the JavaScript function is here.

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

Upvotes: 3

TheVillageIdiot
TheVillageIdiot

Reputation: 40512

C# to JavaScript: you can register script block to run on page like following:

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

replace alert() part with your function name.

For calling C# method from JavaScript you can use ScriptManager or jQuery. I personally use jQuery. You need to decorate the method that you want to call from JavaScript with WebMethod attribute. For more information regarding calling C# method (called PageMethod) from jQuery you can refer to Dave Ward's post.

Upvotes: 59

Josh Kodroff
Josh Kodroff

Reputation: 28141

You can expose C# methods on codebehind pages to be callable via JavaScript by using the ScriptMethod attribute.

You cannot call JavaScript from a CodeBehind - that code exists solely on the client.

Upvotes: -1

ThiefMaster
ThiefMaster

Reputation: 318778

You cannot. Codebehind is running on the server while JavaScript is running on the client.

However, you can add <script type="text/javascript">someFunction();</script> to your output and thus cause the JS function to be called when the browser is parsing your markup.

Upvotes: 8

Katie Kilian
Katie Kilian

Reputation: 6993

You can't call a Javascript function from the CodeBehind, because the CodeBehind file contains the code that executes server side on the web server. Javascript code executes in the web browser on the client side.

Upvotes: -1

Related Questions