从CodeBehind调用JavaScript函数

我是JavaScript编程和C#编程的新手。 有人可以提供从CodeBehind和ViceVersa调用JavaScript函数的好例子。

谢谢

你可以试试这个:

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

C#JavaScript:你可以注册脚本块在页面上运行,如下所示:

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

用你的函数名称replacealert()部分。

为了从JavaScript调用C#方法,您可以使用ScriptManagerjQuery 。 我个人使用jQuery 。 您需要使用WebMethod属性修饰要从JavaScript调用的方法。 有关从jQuery调用C#方法(称为PageMethod )的更多信息,请参阅Dave Ward的文章。

从后面的代码调用JavaScript函数

第1步添加您的Javascript代码

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

第2步在您的webForm中添加1个脚本pipe理器 ,并添加1 button

第3步添加此代码在您的button单击事件

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

你不能直接这样做。 Javascript是由浏览器和C#服务器解释的。 你可以使用javscript从服务器调用方法

  • 在目标方法中使用webmethod作为属性。
  • 添加scriptmanager设置EnablePageMethods为true
  • 添加JavaScript代码通过对象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

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

第3步:使用JavaScript调用该方法

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

看看这个链接。

要从服务器调用JavaScript函数,您可以使用RegisterStartipScript:

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

如果你需要发送一个值作为参数。

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

你不能。 当客户端运行JavaScript时,Codebehind在服务器上运行。

但是,您可以将<script type="text/javascript">someFunction();</script>到输出中,从而在浏览器parsing标记时调用JS函数。

IIRC代码后面是编译服务器端和JavaScript解释客户端。 这意味着两者之间没有直接的联系。

另一方面,你可以做的是让客户端和服务器通过一个叫AJAX的漂亮工具进行通信。 http://en.wikipedia.org/wiki/Asynchronous_JavaScript_and_XML

你可以使用文字:

 this.Controls.Add(new LiteralControl("<script type='text/javascript'>myFunction();</script>")); 
 ScriptManager.RegisterStartupScript(this, this.Page.GetType(),"updatePanel1Script", "javascript:ConfirmExecute()",true/> 

你可以做的另一件事是创build一个会话variables,在后面的代码中设置,然后检查该variables的状态,然后运行你的JavaScript。 好的是,这将允许你在你想要的地方运行你的脚本,而不是必须弄清楚你是否希望它在DOM或全局运行。

像这样的东西:后面的代码:

 Session["newuser"] = "false" 

在JavaScript中

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

工作示例:_

 <%@ 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. JS函数有一些错误

您可以通过使用ScriptMethod属性,在代码隐藏页面上公开C#方法,通过JavaScript调用。

您不能从CodeBehind调用JavaScript – 该代码仅存在于客户端上。

这是我做到的。

显示标签和button控件的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> 

JavaScriptfunction在这里。

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

触发JavaScript函数的代码在这里。

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

这对我有用

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

我一直在注意很多答案,这里使用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); 

当然,我希望不用说,你需要用你的关键标识符来代替key,而且应该把所有这些都转移到一个子/函数/方法中,并且传递key和一些JavaScript对象(如果你的javascript方法要求你的arg是一个javascript对象)。

MSDN文档:

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

您不能从CodeBehind调用Javascript函数,因为CodeBehind文件包含在Web服务器上执行服务器端的代码。 Javascript代码在客户端的Web浏览器中执行。