18 ответов:
вы можете попробовать это :
Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);
C# на JavaScript: вы можете зарегистрировать блок скрипта для запуска на странице следующим образом:
ClientScript.RegisterStartupScript(GetType(),"hwa","alert('Hello World');",true);заменить
alert()часть с именем функции.для вызова метода C# из JavaScript можно использовать
ScriptManagerилиjQuery. Я лично используюjQuery. Вам нужно украсить метод, который вы хотите вызвать из JavaScript с помощью
вызов функции JavaScript из кода
Шаг 1 Добавьте свой код Javascript
<script type="text/javascript" language="javascript"> function Func() { alert("hello!") } </script>Шаг 2 Добавить 1 Script Manager в вашей веб-форме и добавить 1 слишком
Шаг 3 добавьте следующий код в событие нажатия кнопки
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Func()", true);
Если вам нужно отправить значение в качестве параметра.
string jsFunc = "myFunc(" + MyBackValue + ")"; ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "myJsFn", jsFunc, true);
вы не можете сделать это напрямую. Javascript интерпретируется браузером, а C# - сервером. То, что вы можете сделать, чтобы вызвать метод с сервера с помощью javscript является
- использовать webmethod в качестве атрибута в целевых методах.
- добавить параметр 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 на страница
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />Шаг 3: вызов метода с помощью javascript
function GetProductsByCategoryID(categoryID) { PageMethods.GetProducts(categoryID, OnGetProductsComplete); }для вызова функции javascript с сервера можно использовать RegisterStartipScript:
ClientScript.RegisterStartupScript(GetType(),"id","callMyJSFunction()",true);
вы не можете. Codebehind выполняется на сервере, в то время как JavaScript выполняется на клиенте.
однако, вы можете добавить
<script type="text/javascript">someFunction();</script>к вашему выходу и, таким образом, вызвать функцию JS, когда браузер анализирует вашу разметку.
код IIRC позади компилируется на стороне сервера, а javascript интерпретируется на стороне клиента. Это означает, что между ними нет прямой связи.
то, что вы можете сделать с другой стороны, это заставить клиента и сервер общаться через отличный инструмент под названием AJAX. http://en.wikipedia.org/wiki/Asynchronous_JavaScript_and_XML
вы можете использовать литерал:
this.Controls.Add(new LiteralControl("<script type='text/javascript'>myFunction();</script>"));
ScriptManager.RegisterStartupScript(this, this.Page.GetType(),"updatePanel1Script", "javascript:ConfirmExecute()",true/>
еще одна вещь, которую вы можете сделать, это создать переменную сеанса, которая будет установлена в коде, а затем проверить состояние этой переменной, а затем запустить javascript. Хорошо, что это позволит вам запускать свой скрипт прямо там, где вы хотите, вместо того, чтобы выяснять, хотите ли вы, чтобы он работал в DOM или глобально.
что-то вроде этого: За код:
Session["newuser"] = "false"в javascript
var newuser = '<%=Session["newuser"]%>'; if (newuser == "yes") startTutorial();
Рабочий Пример :_
<%@ 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 имеет некоторую ошибку
Я заметил, что многие ответы здесь используют
ScriptManager.RegisterStartupScriptи если вы собираетесь сделать это, это не правильный способ сделать это. Правильный способ-использоватьScriptManager.RegisterScriptBlock([my list of args here]). Причина в том, что вы должны использовать RegisterStartupScript только при загрузке страницы (отсюда и название RegisterStartupScript).In 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 docs:
https://msdn.microsoft.com/en-us/library/bb338357 (v=vs. 110). aspx
вы не можете вызвать функцию Javascript из CodeBehind, потому что файл CodeBehind содержит код, который выполняется на стороне сервера на веб-сервере. Код JavaScript выполняется в браузере на стороне клиента.
вы можете предоставить методы C# на страницах codebehind для вызова через JavaScript с помощью атрибут ScriptMethod.
вы не можете вызвать JavaScript из CodeBehind-этот код существует только на клиенте.
вот как я это сделал.
разметка 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);
я использовал ScriptManager в коде позади, и он работал нормально.
ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "CallMyFunction", "confirm()", true);Если вы используете UpdatePanel в ASP Frontend. Затем введите имя UpdatePanel и "имя функции", определенное с помощью тегов скрипта.
ScriptManager.RegisterStartupScript(Page, GetType(), "JavaFunction", "AlertError();", true);использование вашей функции достаточно
Comments