从 CodeBehind 调用 JavaScript 函数

有人能提供从 CodeBehind 调用 JavaScript 函数和反之亦然的好例子吗?

818302 次浏览

IIRC Code Behind 是在服务器端编译的,javascript 是在客户端解释的。这意味着两者之间没有直接联系。

另一方面,您可以让客户机和服务器通过一个名为 AJAX 的巧妙工具进行通信。http://en.wikipedia.org/wiki/Asynchronous_JavaScript_and_XML

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

不能。代码隐藏在服务器上运行,而 JavaScript 在客户机上运行。

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

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

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

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

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

用函数名替换 alert()部分。

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

你不能直接这么做。在标准的 WebFormsJavaScript 中,浏览器解释 JavaScript,服务器解释 C # 。使用 JavaScript 从服务器调用方法的步骤如下。

像这样:

第一步

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: 在 Page上添加 ScriptManager

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

步骤3: 使用 JavaScript 调用方法

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

看看这个链接。

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

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

我就是这么做的。

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

JavaScript 函数在这里。

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

你可以试试这个:

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

从后面的代码调用 JavaScript 函数

步骤1添加 Javascript 代码

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

第二步在你的 webForm 中添加1个 脚本管理器,也添加1个 纽扣

步骤3在按钮单击事件中添加此代码

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

您可以做的另一件事是创建一个在后面的代码中设置的会话变量,然后检查该变量的状态,然后运行您的 javascript。这样做的好处是,您可以在需要的地方运行脚本,而不必考虑是在 DOM 中运行脚本还是在全局运行脚本。

就像这样: 暗号:

Session["newuser"] = "false"

在 javascript 中

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

如果需要将值作为参数发送。

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

你可以使用字面意思:

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

这对我有用

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

工作示例: _

<%@ 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 函数出错了

我注意到这里的很多答案都是用 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,并且可能应该将所有这些都移动到一个 sub/function/method 中,然后传入 key 和一些 JavascriptObject (如果你的 javascript 方法要求你的 arg 是一个 javascript 对象)。

MSDN 文档:

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

我在 Code Behind 中使用了 ScriptManager,它工作得很好。

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

如果你在 ASP Frontend 使用 UpdatePanel。 然后,输入 UpdatePanel 名称和用脚本标记定义的“ function name”。

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

使用你的函数就足够了

尝试在代码后面这将工作100%

在“代码隐藏”文件中编写这行代码

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

这是网页表单

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

因为我无法找到一个解决方案是代码后面,其中包括尝试 ClientScriptScriptManager像 mutian 和 Orlando Herrera 说在这个问题(他们都不知道为什么失败了) ,我将提供一个前端解决方案,利用按钮点击其他人,如果他们在同样的位置。这对我很有效:

HTML 标记:

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

JavaScript:

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

我只是使用了一个 ASP.NET 按钮,它利用了 OnClientClick属性,这个属性触发客户端脚本函数,也就是 JavaScript。这里需要注意的关键事项是在函数调用和函数本身中使用 return关键字。我读过一些文档,它们不使用 return,但仍然可以点击按钮工作——不知怎么的,它们对我来说不起作用。函数中的 return false;语句指定回发不应该发生。您还可以在 OnClientClick属性: OnClientClick="myFunction() return false;"中使用该语句

谢谢“ Liko”,在他的回答中加上一条评论。

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

在变量中添加单引号(') ,否则它将显示错误消息:

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