从CodeBehind调用JavaScript函数

ssm*_*net 140 javascript c# asp.net

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

mut*_*nic 191

你可以试试这个:

Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);
Run Code Online (Sandbox Code Playgroud)

  • 我会选择ScriptManager.RegisterStartupScript(Page,typeof(Page),"somekey",script,true); 做法.它也适用于部分回发. (38认同)
  • 1.有时需要`Page.ClientScript.RegisterClientScriptBlock` [参见这篇文章的信息](http://stackoverflow.com/questions/666519/difference-between-registerstartupscript-and-registerclientscriptblock).2.值得一提的是,为了使MyFunction()工作,MyFunction()必须在表单标记之前或其内部定义,但不能在</ form>结束标记之后定义(否则将出现Object预期错误)发生) (9认同)
  • `ScriptManager.RegisterStartupScript(this.Page, typeof(Page), "text", "openDep()", true);` 有效。`this.GetType()` 为我抛出一个错误。 (2认同)
  • 当代码用`asp:UpdatePanel'包装并在按钮事件中编写时,此方法不起作用。这导致页面回发。 (2认同)

The*_*iot 52

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

ClientScript.RegisterStartupScript(GetType(),"hwa","alert('Hello World');",true);
Run Code Online (Sandbox Code Playgroud)

alert()用您的函数名称替换part.

要从JavaScript调用C#方法,您可以使用ScriptManagerjQuery.我个人用jQuery.您需要使用WebMethod属性来装饰要从JavaScript调用的方法.有关PageMethodjQuery您调用C#方法(被调用)的更多信息,请参阅Dave Ward的帖子.


Orl*_*era 50

从后面的代码调用JavaScript函数

第1步添加您的Javascript代码

<script type="text/javascript" language="javascript">
    function Func() {
        alert("hello!")
    }
</script>
Run Code Online (Sandbox Code Playgroud)

步骤2加1 脚本管理的WebForm中,添加1个按钮太多

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

ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Func()", true);
Run Code Online (Sandbox Code Playgroud)


小智 16

你不能直接这样做.在标准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 
    }
Run Code Online (Sandbox Code Playgroud)

第2步:添加ScriptManagerPage

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
Run Code Online (Sandbox Code Playgroud)

第3步:使用JavaScript调用方法

function GetProductsByCategoryID(categoryID)
{
    PageMethods.GetProducts(categoryID, OnGetProductsComplete);
}
Run Code Online (Sandbox Code Playgroud)

看看这个链接.

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

ClientScript.RegisterStartupScript(GetType(),"id","callMyJSFunction()",true);
Run Code Online (Sandbox Code Playgroud)


Lik*_*iko 14

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

string jsFunc = "myFunc(" + MyBackValue + ")";
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "myJsFn", jsFunc, true);
Run Code Online (Sandbox Code Playgroud)


Thi*_*ter 7

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

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

  • "你做不到.但这就是你如何做到的." (63认同)
  • 噢,当然可以.您可以从您的javascript或AJAX调用回发任何内容.我觉得好笑; 我倾向于做同样的事情 - "不,那是不可能的.如果可能,甚至没有人愿意这样做." 几分钟后"所以这就是我们要做的事情." (8认同)
  • 我不会考虑从服务器端代码调用方法,因为您没有真正的方法来获取返回值或指定回调. (3认同)

小智 7

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

像这样:代码背后:

Session["newuser"] = "false" 
Run Code Online (Sandbox Code Playgroud)

在javascript中

var newuser = '<%=Session["newuser"]%>';
 if (newuser == "yes")
     startTutorial();  
Run Code Online (Sandbox Code Playgroud)


Dil*_*dav 6

你可以使用文字:

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


Cha*_*mar 6

在代码隐藏中试试这个,它会 100% 工作

在你的代码隐藏文件中写下这行代码

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

这是网页表单页面

<script type="text/javascript">
    function YourJavaScriptFunctionName() {
        alert("Test!")
    }
</script>
Run Code Online (Sandbox Code Playgroud)


Ber*_*oet 5

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

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


小智 5

ScriptManager.RegisterStartupScript(this, this.Page.GetType(),"updatePanel1Script", "javascript:ConfirmExecute()",true/>
Run Code Online (Sandbox Code Playgroud)

  • 添加一些解释 (9认同)

Hit*_*ahu 5

工作示例:_

<%@ 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>
Run Code Online (Sandbox Code Playgroud)

背后的代码

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

    }
}
Run Code Online (Sandbox Code Playgroud)

可能的陷阱:-

  1. 代码和 HTML 可能不在同一个命名空间中
  2. CodeBehind="History.aspx.cs" 指向错误的页面
  3. JS 函数有一些错误