Câu trả lời:
Bạn có thể thử điều này:
Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);
Page.ClientScript.RegisterClientScriptBlock
được yêu cầu thay vì xem bài đăng này để biết thông tin . 2. Điều đáng nói là để MyFactor () hoạt động, MyFunction () phải được xác định trước các thẻ biểu mẫu hoặc bên trong chúng, nhưng KHÔNG phải sau thẻ kết thúc </ form> (nếu không, lỗi dự kiến của đối tượng sẽ xảy ra)
ScriptManager.RegisterStartupScript(this.Page, typeof(Page), "text", "openDep()", true);
làm. this.GetType()
ném một lỗi cho tôi.
asp:UpdatePanel
và được viết trong một sự kiện nút. Điều này gây ra các trang để postback.
C # sang JavaScript: bạn có thể đăng ký khối tập lệnh để chạy trên trang như sau:
ClientScript.RegisterStartupScript(GetType(),"hwa","alert('Hello World');",true);
thay thế alert()
một phần với tên chức năng của bạn.
Để gọi phương thức C # từ JavaScript, bạn có thể sử dụng ScriptManager
hoặc jQuery
. Cá nhân tôi sử dụng jQuery
. Bạn cần trang trí phương thức mà bạn muốn gọi từ JavaScript bằng WebMethod
thuộc tính. Để biết thêm thông tin về cách gọi phương thức C # (được gọi PageMethod
) từ jQuery
bạn có thể tham khảo bài đăng của Dave Ward .
Gọi một hàm JavaScript từ mã phía sau
Bước 1 Thêm mã Javascript của bạn
<script type="text/javascript" language="javascript">
function Func() {
alert("hello!")
}
</script>
Bước 2 Thêm 1 Trình quản lý tập lệnh trong webForm của bạn và Thêm 1 nút nữa
Bước 3 Thêm mã này vào sự kiện nhấn nút của bạn
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Func()", true);
ScriptManager
như trong câu trả lời này, không phải Page.ClientScript
như trong các câu trả lời khác. Có thể liên quan đến asp:UpdatePanel
bình luận dưới câu trả lời được chấp nhận.
Bạn không thể làm điều này trực tiếp. Trong WebForms tiêu chuẩn, JavaScript được trình duyệt và C # giải thích bởi máy chủ. Những gì bạn có thể làm để gọi một phương thức từ máy chủ bằng JavaScript là.
WebMethod
như attribute
trong các phương pháp đích.ScriptManager
cài đặt EnablePageMethods
là true
.PageMethods
.Như thế này:
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
}
ScriptManager
vàoPage
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
function GetProductsByCategoryID(categoryID)
{
PageMethods.GetProducts(categoryID, OnGetProductsComplete);
}
Để gọi một hàm JavaScript từ máy chủ, bạn có thể sử dụng RegisterStartupScript
:
ClientScript.RegisterStartupScript(GetType(),"id","callMyJSFunction()",true);
GetProducts()
Hàm này chỉ là một hàm đằng sau mã nằm trong bộ điều khiển trong ứng dụng MVC, vì vậy các thẻ nằm trên bất kỳ chức năng nào bạn muốn đặt trong bộ điều khiển mà bạn dự định gọi từ JavaScript .
Một điều khác bạn có thể làm là tạo một biến phiên được đặt trong mã phía sau và sau đó kiểm tra trạng thái của biến đó và sau đó chạy javascript của bạn. Điều tốt là điều này sẽ cho phép bạn chạy tập lệnh của mình ngay tại nơi bạn muốn thay vì phải tìm ra nếu bạn muốn nó chạy trong DOM hoặc trên toàn cầu.
Một cái gì đó như thế này: Mã phía sau:
Session["newuser"] = "false"
Trong javascript
var newuser = '<%=Session["newuser"]%>';
if (newuser == "yes")
startTutorial();
Bạn không thể. Codebehind đang chạy trên máy chủ trong khi JavaScript đang chạy trên máy khách.
Tuy nhiên, bạn có thể thêm <script type="text/javascript">someFunction();</script>
vào đầu ra của mình và do đó khiến hàm JS được gọi khi trình duyệt phân tích cú pháp đánh dấu của bạn.
Bạn có thể sử dụng nghĩa đen:
this.Controls.Add(new LiteralControl("<script type='text/javascript'>myFunction();</script>"));
Mã IIRC Phía sau được biên dịch bên máy chủ và javascript được giải thích phía máy khách. Điều này có nghĩa là không có liên kết trực tiếp giữa hai.
Mặt khác, những gì bạn có thể làm là để máy khách và máy chủ liên lạc thông qua một công cụ tiện lợi có tên AJAX. http://en.wikipedia.org/wiki/Asynyncous_JavaScript_and_XML
Hãy thử điều này trong Code đằng sau và nó sẽ hoạt động 100%
Viết dòng mã này vào bạn Mã đằng sau tệp
string script = "window.onload = function() { YourJavaScriptFunctionName(); };";
ClientScript.RegisterStartupScript(this.GetType(), "YourJavaScriptFunctionName", script, true);
Và đây là trang web mẫu
<script type="text/javascript">
function YourJavaScriptFunctionName() {
alert("Test!")
}
</script>
ScriptManager.RegisterStartupScript(this, this.Page.GetType(),"updatePanel1Script", "javascript:ConfirmExecute()",true/>
Ví dụ làm việc: _
<%@ 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>
Mã ẩn
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);
}
}
}
Cạm bẫy có thể xảy ra: -
CodeBehind="History.aspx.cs"
đang chỉ đến trang saiTôi đã nhận thấy rất nhiều câu trả lời ở đây đang sử dụng ScriptManager.RegisterStartupScript
và nếu bạn sẽ làm điều đó, đó không phải là cách đúng đắn để làm điều đó. Cách đúng là sử dụng ScriptManager.RegisterScriptBlock([my list of args here])
. Lý do là bạn chỉ nên sử dụng RegisterStartupScript khi trang của bạn tải (do đó có tên là RegisterStartupScript).
Trong VB.NET:
ScriptManager.RegisterClientScriptBlock(Page, GetType(String), "myScriptName" + key, $"myFunctionName({someJavascriptObject})", True)
trong C #:
ScriptManager.RegisterClientScriptBlock(Page, typeof(string), "myScriptName" + key, $"myFunctionName({someJavascriptObject})", true);
Tất nhiên, tôi hy vọng không cần phải nói rằng bạn cần thay thế khóa bằng mã định danh khóa của mình và có lẽ nên chuyển tất cả điều này thành một phụ / hàm / phương thức và truyền vào khóa và someJavascriptObject (nếu phương thức javascript của bạn yêu cầu đối số của bạn là đối tượng javascript).
Tài liệu MSDN:
https://msdn.microsoft.com/en-us/l Library / bb338357 (v = vs.110) .aspx
ScriptManager.RegisterStartupScript(Page, GetType(), "JavaFunction", "AlertError();", true);
sử dụng chức năng của bạn là đủ
Đây là cách tôi đã thực hiện nó.
Đánh dấu HTML hiển thị nhãn và điều khiển nút như sau.
<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>
Hàm JavaScript có ở đây.
<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>
Mã phía sau để kích hoạt chức năng JavaScript là ở đây.
lblJavaScript.Text = "<script type='text/javascript'>showDialogue();</script>";
cái này hiệu quả với tôi
object Json_Object=maintainerService.Convert_To_JSON(Jobitem);
ScriptManager.RegisterClientScriptBlock(this,GetType(), "Javascript", "SelectedJobsMaintainer("+Json_Object+"); ",true);
Vì tôi không thể tìm ra giải pháp có mã phía sau, bao gồm thử ClientScript
và ScriptManager
giống như mutanic và Orlando Herrera đã nói trong câu hỏi này (cả hai đều thất bại), tôi sẽ cung cấp giải pháp mặt trước sử dụng các lần nhấp nút cho người khác nếu họ ở cùng vị trí với tôi. Điều này làm việc cho tôi:
Đánh dấu HTML:
<asp:button ID="myButton" runat="server" Text="Submit" OnClientClick="return myFunction();"></asp:button>
JavaScript:
function myFunction() {
// Your JavaScript code
return false;
}
Tôi chỉ đơn giản là sử dụng một nút ASP.NET sử dụng thuộc OnClientClick
tính, kích hoạt các chức năng kịch bản phía máy khách, đó là JavaScript. Những điều quan trọng cần lưu ý ở đây là việc sử dụng return
từ khóa trong lệnh gọi hàm và trong chính hàm đó. Tôi đã đọc các tài liệu không sử dụng return
nhưng vẫn nhận được nút bấm để hoạt động - bằng cách nào đó nó không hoạt động với tôi. Câu return false;
lệnh trong hàm chỉ định một postback KHÔNG nên xảy ra. Bạn cũng có thể sử dụng tuyên bố đó trong OnClientClick
tài sản:OnClientClick="myFunction() return false;"
Tôi đã sử dụng ScriptManager trong Code Phía sau và nó hoạt động tốt.
ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "CallMyFunction", "confirm()", true);
Nếu bạn đang sử dụng UpdatePanel trong ASP Frontend. Sau đó, nhập tên UpdatePanel và 'tên hàm' được xác định bằng các thẻ script.
Cảm ơn "Liko", chỉ cần thêm một nhận xét cho câu trả lời của anh ấy.
string jsFunc = "myFunc(" + MyBackValue + ")";
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "myJsFn", jsFunc, true);
Đã thêm dấu ngoặc đơn ( '
) vào biến, nếu không nó sẽ đưa ra thông báo lỗi:
string jsFunc = "myFunc('" + MyBackValue + "')";
Bạn không thể gọi một hàm Javascript từ CodeBehind, vì tệp CodeBehind chứa mã thực thi phía máy chủ trên máy chủ web. Mã Javascript thực thi trong trình duyệt web ở phía máy khách.
Bạn có thể hiển thị các phương thức C # trên các trang mã để có thể gọi được thông qua JavaScript bằng cách sử dụng thuộc tính ScriptMethod .
Bạn không thể gọi JavaScript từ CodeBehind - mã đó chỉ tồn tại trên máy khách.