从代码背后调用JavaScript函数

时间:2011-04-20 13:37:55

标签: c# javascript asp.net

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

20 个答案:

答案 0 :(得分:183)

你可以试试这个:

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

答案 1 :(得分:48)

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

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

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

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

答案 2 :(得分:45)

从后面的代码调用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);

答案 3 :(得分:12)

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

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

答案 4 :(得分:12)

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

像这样:

第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步:使用JavaScript调用方法

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

Take a look at this link.

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

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

答案 5 :(得分:8)

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

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

答案 6 :(得分:7)

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

这样的事情: 代码背后:

Session["newuser"] = "false" 

在javascript中

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

答案 7 :(得分:6)

您可以使用文字:

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

答案 8 :(得分:5)

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

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

答案 9 :(得分:4)

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

答案 10 :(得分: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. JS功能有一些错误

答案 11 :(得分:2)

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

使用您的功能就足够

答案 12 :(得分:1)

我就是这样做的。

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

答案 13 :(得分:1)

您可以使用ScriptMethod attribute在页面后面的代码上公开C#方法,以便通过JavaScript进行调用。

您无法从代码隐藏中调用JavaScript - 该代码仅存在于客户端上。

答案 14 :(得分:1)

这对我有用

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

答案 15 :(得分:0)

感谢“ Liko”,只需在他的回答中添加评论。

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

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

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

答案 16 :(得分:0)

由于我找不到代码背后的解决方案,包括尝试像mutanic和Orlando Herrera这样的问题ClientScriptScriptManager(他们都以某种方式失败了),我将提供一个前端解决方案,如果其他人与我处于同一位置,则可以利用它们来实现按钮点击。这对我有用:

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

答案 17 :(得分:0)

在“隐藏代码”中尝试一下,它将100%起作用

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

答案 18 :(得分:0)

我在Code Behind中使用了ScriptManager,它运行良好。

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

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

答案 19 :(得分:0)

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