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



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

478   18  

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);
        }

    }
}

возможные "подводные камни": -

  1. код и HTML могут не находиться в одном пространстве имен
  2. CodeBehind="History.aspx.cs" указывает не на ту страницу
  3. функция 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

    Ничего не найдено.