Вызов функции JavaScript из CodeBehind

Может ли кто-нибудь предоставить хорошие примеры вызова функции JavaScript из CodeBehind и наоборот?

Ответ 1

Вы можете попробовать следующее:

Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);

Ответ 2

С# к JavaScript: вы можете зарегистрировать блок script для запуска на странице, как показано ниже:

ClientScript.RegisterStartupScript(GetType(),"hwa","alert('Hello World');",true);

замените часть alert() на ваше имя функции.

Для вызова метода С# из JavaScript вы можете использовать ScriptManager или jQuery. Я лично использую jQuery. Вам необходимо украсить метод, который вы хотите вызвать из JavaScript с атрибутом WebMethod. Для получения дополнительной информации о вызове метода С# (называемого PageMethod) из jQuery вы можете обратиться к сообщению Dave Ward.

Ответ 3

Вызов функции JavaScript из кода

Шаг 1 Добавьте свой Javascript-код

<script type="text/javascript" language="javascript">
    function Func() {
        alert("hello!")
    }
</script>

Шаг 2 Добавьте 1 Script Менеджер в свой веб-форму и добавьте 1 кнопку тоже

Шаг 3 Добавьте этот код в событие нажатия кнопки

ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Func()", true);

Ответ 4

Вы не можете сделать это напрямую. В стандартных веб-формах JavaScript интерпретируется браузером, а С# - сервером. Чтобы вызвать метод с сервера с помощью 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);

Ответ 5

Если вам нужно отправить значение в качестве параметра.

string jsFunc = "myFunc(" + MyBackValue + ")";
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "myJsFn", jsFunc, true);

Ответ 6

Вы не можете. Codebehind работает на сервере, а JavaScript работает на клиенте.

Однако вы можете добавить <script type="text/javascript">someFunction();</script> к вашему выводу и, таким образом, вызвать функцию JS, которая будет вызываться, когда браузер анализирует вашу разметку.

Ответ 7

Еще одна вещь, которую вы можете сделать, - создать переменную сеанса, которая будет установлена ​​в коде позади, а затем проверить состояние этой переменной, а затем запустить javascript. Хорошо, что это позволит вам запустить ваш script, где вы хотите, вместо того, чтобы выяснить, хотите ли вы, чтобы он выполнялся в DOM или глобально.

Что-то вроде этого: Код позади:

Session["newuser"] = "false" 

В javascript

var newuser = '<%=Session["newuser"]%>';
 if (newuser == "yes")
     startTutorial();  

Ответ 8

Вы можете использовать литерал:

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

Ответ 9

Код IIRC Закомпилирован serveride и javascript интерпретируется на стороне клиента. Это означает, что между ними нет прямой связи.

Что вы можете сделать, с другой стороны, это общение с клиентом и сервером через отличный инструмент под названием AJAX. http://en.wikipedia.org/wiki/Asynchronous_JavaScript_and_XML

Ответ 10

ScriptManager.RegisterStartupScript(this, this.Page.GetType(),"updatePanel1Script", "javascript:ConfirmExecute()",true/>

Ответ 11

Рабочий пример: _

<%@ 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 имеет некоторую ошибку

Ответ 12

Я замечал много ответов здесь, используя ScriptManager.RegisterStartupScript, и если вы собираетесь это сделать, это неправильный способ сделать это. Правильный способ - использовать ScriptManager.RegisterScriptBlock([my list of args here]). Причина заключается в том, что вы должны использовать RegisterStartupScript только при загрузке страницы (отсюда и имя RegisterStartupScript).

В VB.NET:

ScriptManager.RegisterClientScriptBlock(Page, GetType(String), "myScriptName" + key, $"myFunctionName({someJavascriptObject})", True)

в С#:

ScriptManager.RegisterClientScriptBlock(Page, typeof(string), "myScriptName" + key, $"myFunctionName({someJavascriptObject})", true);

Конечно, я надеюсь, что, разумеется, вам нужно заменить ключ на свой ключевой идентификатор и, вероятно, переместить все это в метод sub/function/method и передать ключ и someJavascriptObject (если ваш метод javascript требует, чтобы ваш arg - объект javascript).

Документы MSDN:

https://msdn.microsoft.com/en-us/library/bb338357(v=vs.110).aspx

Ответ 13

Вот как я это сделал.

Разметка 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>";

Ответ 14

ScriptManager.RegisterStartupScript(Page, GetType(), "JavaFunction", "AlertError();", true);

с использованием вашей функции достаточно

Ответ 15

это работает для меня

object Json_Object=maintainerService.Convert_To_JSON(Jobitem);
ScriptManager.RegisterClientScriptBlock(this,GetType(), "Javascript", "SelectedJobsMaintainer("+Json_Object+"); ",true);

Ответ 16

Я использовал ScriptManager в Code Behind, и он работал нормально.

ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "CallMyFunction", "confirm()", true);

Если вы используете UpdatePanel в ASP Frontend. Затем введите имя UpdatePanel и "имя функции", определенные тегами script.

Ответ 17

Попробуйте это в Code Behind, и он будет работать на 100%

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

Ответ 18

Так как я не смог найти решение, стоящее за кодом, которое включает в себя попытку использования 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;"

Ответ 19

Спасибо "Лико", просто добавьте комментарий к его ответу.

string jsFunc = "myFunc(" + MyBackValue + ")";
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "myJsFn", jsFunc, true);

Добавлены одинарные кавычки (') в переменную, в противном случае появится сообщение об ошибке:

string jsFunc = "myFunc('" + MyBackValue + "')";

Ответ 20

Вы не можете вызывать Javascript-функцию из CodeBehind, потому что файл CodeBehind содержит код, который выполняет серверную часть на веб-сервере. Код Javascript выполняется в веб-браузере на стороне клиента.

Ответ 21

Вы можете выставить методы С# на страницах кода, которые могут быть вызваны через JavaScript, с помощью атрибута ScriptMethod.

Вы не можете вызвать JavaScript из CodeBehind - этот код существует исключительно на клиенте.