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




run javascript codebehind (14)

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


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 .


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;"


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.


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

O IIRC Code Behind é compilado no serverside e o javascript é interpretado no lado do cliente. Isso significa que não há ligação direta entre os dois.

O que você pode fazer, por outro lado, é ter o cliente e o servidor se comunicando através de uma ferramenta bacana chamada AJAX. http://en.wikipedia.org/wiki/Asynchronous_JavaScript_and_XML


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

Tente isso no Code Behind e funcionará 100%

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

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.


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.


Você pode expor métodos C # em páginas codebehind para ser chamado via JavaScript usando o atributo ScriptMethod .

Você não pode chamar JavaScript de um CodeBehind - esse código existe somente no cliente.


Você pode usar literal:

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

isso funciona para mim

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

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

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

usando sua função é o suficiente





asp.net