从 CodeBehind 调用 JavaScript 函数

本文关键字:函数 JavaScript 调用 CodeBehind | 更新日期: 2023-09-27 17:52:34

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

从 CodeBehind 调用 JavaScript 函数

你可以试试这个:

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

从代码隐藏调用 JavaScript 函数

步骤 1 添加您的 Javascript 代码

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

步骤 2 在您的 webForm 中添加 1 个脚本管理器并添加 1 个按钮

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

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

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

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

alert()部分替换为您的函数名称。

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

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

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

你不能直接这样做。在标准的WebForms中,JavaScript由浏览器解释,C#由服务器解释。使用 JavaScript 从服务器调用方法可以做的是。

  • 在目标方法中使用WebMethod作为attribute
  • 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:在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);

你可以做的另一件事是创建一个在代码隐藏中设置的会话变量,然后检查该变量的状态,然后运行你的javascript。好消息是这将允许您在您想要的位置运行脚本,而不必确定您希望它在 DOM 中还是全局运行。

像这样:代码隐藏:

Session["newuser"] = "false" 

在 JavaScript 中

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

您可以使用文字:

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

。Codeback在服务器上运行,而JavaScript在客户端上运行。

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

工作示例:_

<%@ 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函数出现一些错误

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

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

ScriptManager.RegisterStartupScript(this, this.Page.GetType(),"updatePanel1Script", "javascript:ConfirmExecute()",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和someJavascriptObject(如果你的javascript方法要求你的arg是一个javascript对象(。

MSDN 文档:

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

这就是我的做法。

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

我有用

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

由于我找不到代码隐藏的解决方案,其中包括尝试像mutanic和Orlando Herrera在这个问题中所说的ClientScriptScriptManager(他们都以某种方式失败了(,我将提供一个前端解决方案,如果他们与我处于相同的位置,则利用按钮单击。这对我有用:

网页标记:

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

我在 Code Behind 中使用了 ScriptManager,它工作正常。

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

如果您在 ASP 前端中使用 UpdatePanel。然后,输入使用脚本标记定义的 UpdatePanel 名称和"函数名称"。

谢谢"Liko",只需为他的回答添加评论。

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

在变量中添加了单引号 ( ' (,否则会给出错误消息:

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

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

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

你不能从 CodeBehind 调用 JavaScript - 该代码只存在于客户端上。