有人可以提供从CodeBehind调用JavaScript函数的好示例,反之亦然吗?
您可以尝试以下方法:
Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);
C#到JavaScript:您可以注册脚本块以在页面上运行,如下所示:
ClientScript.RegisterStartupScript(GetType(),"hwa","alert('Hello World');",true);
alert()
用您的函数名称替换部件。
要从JavaScript调用C#方法,可以使用ScriptManager
或jQuery
。我个人使用jQuery
。您需要使用WebMethod
属性修饰要从JavaScript调用的方法。有关PageMethod
从中调用C#方法(称为)的更多信息,jQuery
请参阅Dave Ward的文章。
从代码后面调用JavaScript函数
步骤1添加您的Javascript代码
<script type="text/javascript" language="javascript">
function Func() {
alert("hello!")
}
</script>
步骤2加1脚本管理的WebForm中,添加1个按钮太多
步骤3在您的按钮点击事件中添加此代码
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Func()", 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步:在ScriptManager
上添加Page
<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);
如果需要发送一个值作为参数。
string jsFunc = "myFunc(" + MyBackValue + ")";
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "myJsFn", jsFunc, true);
您可以做的另一件事是创建一个会话变量,该变量在后面的代码中进行设置,然后检查该变量的状态,然后运行您的JavaScript。好处是,这将使您可以在想要的位置运行脚本,而不必弄清楚是要在DOM中运行还是在全局中运行。
像这样的代码:
Session["newuser"] = "false"
在JavaScript中
var newuser = '<%=Session["newuser"]%>';
if (newuser == "yes")
startTutorial();
你不能。JavaScript在客户端上运行时,Codebehind在服务器上运行。
但是,您可以添加<script type="text/javascript">someFunction();</script>
到输出中,从而在浏览器解析您的标记时导致JS函数被调用。
您可以使用文字:
this.Controls.Add(new LiteralControl("<script type='text/javascript'>myFunction();</script>"));
IIRC背后的代码是在服务器端编译的,而javascript是在客户端解释的。这意味着两者之间没有直接联系。
另一方面,您可以做的是让客户端和服务器通过称为AJAX的漂亮工具进行通信。http://en.wikipedia.org/wiki/Asynchronous_JavaScript_and_XML
工作示例:_
<%@ 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);
}
}
}
可能的陷阱:
- 代码和HTML可能不在同一名称空间中
CodeBehind="History.aspx.cs"
指向错误的页面- JS功能出现错误
在“隐藏代码”中尝试一下,它将可以100%工作
在您的代码隐藏文件中写入以下代码行
string script = "window.onload = function() { YourJavaScriptFunctionName(); };";
ClientScript.RegisterStartupScript(this.GetType(), "YourJavaScriptFunctionName", script, true);
这是网络表单页面
<script type="text/javascript">
function YourJavaScriptFunctionName() {
alert("Test!")
}
</script>
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);
当然,我希望不用多说,您需要用键标识符替换键,并且应该将所有这些都移到sub / function / method中,并传递键和someJavascriptObject(如果您的javascript方法要求您的arg是javascript对象)。
MSDN文档:
https://msdn.microsoft.com/zh-CN/library/bb338357(v=vs.110).aspx
ScriptManager.RegisterStartupScript(Page, GetType(), "JavaFunction", "AlertError();", 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>";
这对我有用
object Json_Object=maintainerService.Convert_To_JSON(Jobitem);
ScriptManager.RegisterClientScriptBlock(this,GetType(), "Javascript", "SelectedJobsMaintainer("+Json_Object+"); ",true);
因为我无法找到一个解决方案,为后面的代码,其中包括尝试ClientScript
和ScriptManager
喜欢mutanic和奥兰多·埃雷拉在这个问题上说(他们都莫名其妙地失败了),我将提供利用按钮点击给别人,如果前端解决方案他们和我处于同一位置。这对我有用:
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;"
我在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-该代码仅存在于客户端上。
文章标签:asp.net , c# , javascript
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!