Відповіді:
Ви можете спробувати це:
Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);
Page.ClientScript.RegisterClientScriptBlockпотрібно натомість переглянути цю публікацію для отримання інформації . 2. Можливо, варто згадати, що для того, щоб MyFunction () працював, MyFunction () повинен бути визначений перед тегами форми або всередині них, але НЕ після тега </form> закінчення (інакше очікувана помилка об'єкта буде відбуваються)
ScriptManager.RegisterStartupScript(this.Page, typeof(Page), "text", "openDep()", true);працює. this.GetType()кидає помилку для мене.
asp:UpdatePanelі записаний у події кнопки. Що призводить до повернення сторінки назад.
C # to JavaScript: ви можете зареєструвати блок скриптів для запуску на сторінці, як:
ClientScript.RegisterStartupScript(GetType(),"hwa","alert('Hello World');",true);
замініть alert()частину на ім’я функції.
Для виклику методу C # з JavaScript ви можете використовувати ScriptManagerабо jQuery. Я особисто використовую jQuery. Вам потрібно прикрасити метод, який потрібно зателефонувати з JavaScript з WebMethodатрибутом. Для отримання додаткової інформації щодо виклику методу C # (зателефонований PageMethod) jQueryви можете ознайомитися з повідомленням Дейва Варда .
Виклик функції JavaScript з коду позаду
Крок 1 Додайте код Javascript
<script type="text/javascript" language="javascript">
function Func() {
alert("hello!")
}
</script>
Крок 2 Додайте 1 Script Менеджер в вашому WebForm і додайте 1 кнопку надто
Крок 3 Додайте цей код до події натискання кнопки
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Func()", true);
ScriptManagerяк у цій відповіді, а не Page.ClientScriptв інших відповідях. Можливо, це стосується asp:UpdatePanelкоментаря під прийнятою відповіддю.
Не можна цього робити безпосередньо. У стандартних WebForms JavaScript інтерпретується браузером, а C # - сервером. Що можна зробити для виклику методу з сервера за допомогою JavaScript.
WebMethodяк attributeв цільових методах.ScriptManagerналаштування EnablePageMethodsяк true.PageMethods.Подобається це:
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наPage<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
function GetProductsByCategoryID(categoryID)
{
PageMethods.GetProducts(categoryID, OnGetProductsComplete);
}
Для виклику функції JavaScript з сервера ви можете використовувати RegisterStartupScript:
ClientScript.RegisterStartupScript(GetType(),"id","callMyJSFunction()",true);
GetProducts()Функція - це лише функція кодування, яка житиме в контролері в додатку MVC, тому теги переходять на верхню частину функції, яку ви хочете ввести в контролер, на який ви хочете зателефонувати з JavaScript .
Інша річ, яку ви можете зробити, - це створити змінну сеансу, яка встановлюється в коді позаду, а потім перевірити стан цієї змінної, а потім запустити Javascript. Хороша річ, що це дозволить запустити сценарій прямо там, де ви хочете, замість того, щоб розібратися, чи хочете ви його запускати в DOM або в усьому світі.
Приблизно так: Код позаду:
Session["newuser"] = "false"
У JavaScript
var newuser = '<%=Session["newuser"]%>';
if (newuser == "yes")
startTutorial();
Ви не можете. Codebehind працює на сервері, а JavaScript працює на клієнті.
Однак ви можете додати <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
Спробуйте це в Code Behind, і це спрацює 100%
Запишіть цей рядок коду у файл Code Behind
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/>
Приклад роботи: _
<%@ 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);
}
}
}
Можливі підводні камені: -
CodeBehind="History.aspx.cs" вказує на неправильну сторінкуЯ помітив дуже багато відповідей, які тут використовуються, 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);
Звичайно, я сподіваюсь, що само собою зрозуміло, що вам потрібно замінити ключ на ваш ідентифікатор ключа, і, ймовірно, слід перемістити все це в підменю / функцію / метод і передати ключ і someJavascriptObject (якщо ваш метод javascript вимагає, щоб ваш аргумент є об’єкт javascript).
Документи MSDN:
https://msdn.microsoft.com/en-us/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 і Orlando Herrera сказав в цьому питанні (обидва вони як - то чи не вийшло ), я запропонувати фронтальним рішення , яке використовує клацання кнопки для інших , якщо вони в тому ж положенні, що і я. Це працювало для мене:
Розмітка 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;"
Я використовував ScriptManager в Code Behind, і він працював чудово.
ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "CallMyFunction", "confirm()", true);
Якщо ви використовуєте UpdatePanel в ASP Frontend. Потім введіть ім'я UpdatePanel та "ім'я функції", визначені тегами сценарію.
Дякую «Ліко», просто додайте коментар до його відповіді.
string jsFunc = "myFunc(" + MyBackValue + ")";
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "myJsFn", jsFunc, true);
До 'змінної додано одинарні лапки ( ), інакше воно видасть повідомлення про помилку:
string jsFunc = "myFunc('" + MyBackValue + "')";
Ви не можете викликати функцію Javascript з CodeBehind, оскільки файл CodeBehind містить код, який виконує сторону сервера на веб-сервері. Код Javascript виконується у веб-браузері на стороні клієнта.
Ви можете відкрити методи C # на сторінках коду, які можна викликати через JavaScript, використовуючи атрибут ScriptMethod .
Ви не можете зателефонувати на JavaScript із CodeBehind - той код існує виключно у клієнта.