c# scriptmanager Chamando a função JavaScript de CodeBehind




run javascript codebehind (16)

Alguém pode fornecer bons exemplos de chamar uma função JavaScript de CodeBehind e vice-versa?


Exemplo de trabalho: _

<%@ 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>

Código por trás

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

    }
}

Possíveis armadilhas:

  1. Código e HTML podem não estar no mesmo namespace
  2. CodeBehind="History.aspx.cs" está apontando para a página errada
  3. Função JS está tendo algum erro

Você não pode fazer isso diretamente. No padrão WebForms JavaScript é interpretado pelo navegador e C # pelo servidor. O que você pode fazer para chamar um método do servidor usando JavaScript é.

Como isso:

Passo 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 
    }

Etapa 2: Adicionando um ScriptManager na Page

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />

Etapa 3: Chamando o método usando JavaScript

function GetProductsByCategoryID(categoryID)
{
    PageMethods.GetProducts(categoryID, OnGetProductsComplete);
}

Dê uma olhada neste link.

Para chamar uma função JavaScript do servidor, você pode usar o RegisterStartupScript :

ClientScript.RegisterStartupScript(GetType(),"id","callMyJSFunction()",true);

Chamando uma função JavaScript do código por trás

Passo 1 Adicione o seu código Javascript

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

Passo 2 Adicione 1 Script Manager no seu webForm e adicione 1 botão também

Passo 3 Adicione este código no seu evento de clique de botão

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

Se você precisar enviar um valor como parâmetro.

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

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

usando sua função é o suficiente


Você não pode. Codebehind está sendo executado no servidor enquanto o JavaScript está sendo executado no cliente.

No entanto, você pode adicionar <script type="text/javascript">someFunction();</script> à sua saída e, assim, fazer com que a função JS seja chamada quando o navegador estiver analisando sua marcação.


Tente isso no Code Behind e funcionará 100%

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

isso funciona para mim

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

Você pode usar literal:

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

Você não pode chamar uma função Javascript do CodeBehind, porque o arquivo CodeBehind contém o código que executa o lado do servidor no servidor web. O código Javascript é executado no navegador da Web no lado do cliente.


C # para JavaScript: você pode registrar o bloco de script para executar na página como segue:

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

substitua a parte alert() pelo nome da sua função.

Para chamar o método C # do JavaScript, você pode usar ScriptManager ou jQuery . Eu pessoalmente uso o jQuery . Você precisa decorar o método que deseja chamar de JavaScript com o atributo WebMethod . Para obter mais informações sobre como chamar o método C # (chamado PageMethod ) do jQuery consulte a postagem de Dave Ward .


Você pode tentar isto:

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

Como não consegui encontrar uma solução que fosse code behind, que inclui testar o ClientScript e o ScriptManager como o mutanic e o Orlando Herrera nesta pergunta (ambos falharam de alguma forma), oferecerei uma solução de front-end que utiliza cliques de botão para outros, se estiverem na mesma posição que eu. Isso funcionou para mim:

Marcação HTML:

<asp:button ID="myButton" runat="server" Text="Submit" OnClientClick="return myFunction();"></asp:button>

JavaScript:

function myFunction() {
    // Your JavaScript code
    return false;
}

Eu estou simplesmente usando um botão ASP.NET que utiliza a propriedade OnClientClick , que aciona funções de script do lado do cliente, sendo JavaScript. As principais coisas a serem observadas aqui são os usos da palavra-chave return na chamada de função e na própria função. Eu li documentos que não usam return mas ainda tem o clique do botão para trabalhar - de alguma forma não funcionou para mim. O return false; instrução na função especifica que um postback não deve acontecer. Você também pode usar essa instrução na propriedade OnClientClick="myFunction() return false;" : OnClientClick="myFunction() return false;"


Outra coisa que você pode fazer é criar uma variável de sessão que é definida no código por trás e, em seguida, verificar o estado dessa variável e, em seguida, executar o seu javascript. O bom é que isso permitirá que você execute seu script exatamente onde quiser, em vez de ter que descobrir se deseja que ele seja executado no DOM ou globalmente.

Algo parecido com isto: Código por trás:

Session["newuser"] = "false" 

Em javascript

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

Eu tenho notado que muitas das respostas aqui estão usando ScriptManager.RegisterStartupScript e se você for fazer isso, não é o jeito certo de fazê-lo. O caminho certo é usar ScriptManager.RegisterScriptBlock([my list of args here]) . A razão disso é que você deve estar usando apenas RegisterStartupScript quando sua página é carregada (daí o nome RegisterStartupScript).

Em VB.NET:

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

em c #:

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

É claro, espero que seja desnecessário dizer que você precisa substituir a chave pelo seu identificador de chave e provavelmente deve mover tudo isso para um sub / function / method e pass key e someJavascriptObject (se o seu método javascript requer que seu arg seja um objeto javascript).

Documentos do MSDN:

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


Eu usei o ScriptManager no Code Behind e funcionou bem.

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

Se você estiver usando UpdatePanel no Frontend ASP. Em seguida, insira o nome UpdatePanel e 'nome da função' definidos com tags de script.





asp.net