Respostas:
Você pode tentar o seguinte:
Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);
Page.ClientScript.RegisterClientScriptBlock
é necessário, em vez disso, consulte esta postagem para obter informações . 2. Vale ressaltar que, para que MyFunction () funcione, MyFunction () deve ser definido antes das tags de formulário ou dentro delas, mas NÃO após a tag final </form> (caso contrário, ocorrerá um erro de objeto esperado ocorrer)
ScriptManager.RegisterStartupScript(this.Page, typeof(Page), "text", "openDep()", true);
trabalho. this.GetType()
lança um erro para mim.
asp:UpdatePanel
e escrito em um evento de botão. O que faz com que a página seja postada.
C # para JavaScript: você pode registrar o bloco de scripts para executar na página da seguinte maneira:
ClientScript.RegisterStartupScript(GetType(),"hwa","alert('Hello World');",true);
substitua a alert()
peça pelo nome da sua função.
Para chamar o método C # do JavaScript, você pode usar ScriptManager
ou jQuery
. Eu pessoalmente uso jQuery
. Você precisa decorar o método que deseja chamar do JavaScript com WebMethod
atributo. Para obter mais informações sobre como chamar o método C # (chamado PageMethod
), jQuery
consulte a publicação de Dave Ward .
Chamando uma Função JavaScript do Código Atrás
Etapa 1 Adicione seu código Javascript
<script type="text/javascript" language="javascript">
function Func() {
alert("hello!")
}
</script>
Etapa 2 Adicione 1 Gerenciador de scripts no seu formulário da web e adicione o botão 1 também
Etapa 3 Adicione este código ao evento de clique no botão
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Func()", true);
ScriptManager
como nesta resposta, não Page.ClientScript
como em outras respostas. Pode estar relacionado ao asp:UpdatePanel
comentário na resposta aceita.
Você não pode fazer isso diretamente. Nas WebForms padrão, o JavaScript é interpretado pelo navegador e C # pelo servidor. O que você pode fazer para chamar um método do servidor usando JavaScript é.
WebMethod
como attribute
nos métodos de destino.ScriptManager
configuração EnablePageMethods
como true
.PageMethods
.Como isso:
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
noPage
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
function GetProductsByCategoryID(categoryID)
{
PageMethods.GetProducts(categoryID, OnGetProductsComplete);
}
Para chamar uma função JavaScript do servidor, você pode usar RegisterStartupScript
:
ClientScript.RegisterStartupScript(GetType(),"id","callMyJSFunction()",true);
GetProducts()
função é apenas uma função de code-behind que residia em um controlador em um aplicativo MVC; portanto, as tags ficam no topo de qualquer função que você deseja colocar em um controlador que você pretenderia chamar de JavaScript .
Outra coisa que você pode fazer é criar uma variável de sessão que seja definida no código por trás e, em seguida, verificar o estado dessa variável e, em seguida, executar seu javascript. O bom é que isso permitirá que você execute seu script exatamente onde deseja, em vez de precisar descobrir se deseja que ele seja executado no DOM ou globalmente.
Algo assim: Código por trás:
Session["newuser"] = "false"
Em javascript
var newuser = '<%=Session["newuser"]%>';
if (newuser == "yes")
startTutorial();
Você não pode. O Codebehind está em execução no servidor enquanto o JavaScript está em execução 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 usar literal:
this.Controls.Add(new LiteralControl("<script type='text/javascript'>myFunction();</script>"));
O IIRC Code Behind é compilado no servidor e o javascript é interpretado no lado do cliente. Isso significa que não há vínculo direto entre os dois.
Por outro lado, o que você pode fazer é que o cliente e o servidor se comuniquem através de uma ferramenta bacana chamada AJAX. http://en.wikipedia.org/wiki/Asynchronous_JavaScript_and_XML
Experimente isto no Code Behind e funcionará 100%
Escreva esta linha de código no arquivo Code Behind
string script = "window.onload = function() { YourJavaScriptFunctionName(); };";
ClientScript.RegisterStartupScript(this.GetType(), "YourJavaScriptFunctionName", script, true);
E esta é a página do formulário da web
<script type="text/javascript">
function YourJavaScriptFunctionName() {
alert("Test!")
}
</script>
ScriptManager.RegisterStartupScript(this, this.Page.GetType(),"updatePanel1Script", "javascript:ConfirmExecute()",true/>
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: -
CodeBehind="History.aspx.cs"
está apontando para a página erradaTenho notado que muitas das respostas aqui estão sendo usadas ScriptManager.RegisterStartupScript
e, se você quiser fazer isso, não é o caminho certo. O caminho certo é usar ScriptManager.RegisterScriptBlock([my list of args here])
. O motivo é que você só deve usar o RegisterStartupScript quando a página carregar (daí o nome RegisterStartupScript).
No 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 key pelo seu identificador de chave e provavelmente deve mover tudo isso para uma sub / function / method e passar key e someJavascriptObject (se o seu método javascript exigir que seu arg seja um objeto javascript).
Documentos do MSDN:
https://msdn.microsoft.com/en-us/library/bb338357(v=vs.110).aspx
ScriptManager.RegisterStartupScript(Page, GetType(), "JavaFunction", "AlertError();", true);
usar sua função é suficiente
Foi assim que eu fiz.
A marcação HTML mostrando um controle de rótulo e botão é a seguinte.
<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>
A função JavaScript está aqui.
<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>
O código para trás para acionar a função JavaScript está aqui.
lblJavaScript.Text = "<script type='text/javascript'>showDialogue();</script>";
isso funciona para mim
object Json_Object=maintainerService.Convert_To_JSON(Jobitem);
ScriptManager.RegisterClientScriptBlock(this,GetType(), "Javascript", "SelectedJobsMaintainer("+Json_Object+"); ",true);
Como não consegui encontrar uma solução com código atrasado, que inclui tentar o ClientScript
eScriptManager
como mutanic e Orlando Herrera disse nesta questão (ambos de alguma forma falhou), vou oferecer uma solução front-end que utiliza cliques de botão para outros se eles estão 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;
}
Estou simplesmente usando um botão ASP.NET que utiliza a OnClientClick
propriedade, que aciona funções de script do lado do cliente, que é JavaScript. As principais coisas a serem observadas aqui são os usos da return
palavra - chave na chamada da função e na própria função. Eu li documentos que não usam, return
mas ainda assim clicam no botão para funcionar - de alguma forma, não funcionou para mim. A return false;
instrução na função especifica que um postback NÃO deve acontecer. Você também pode usar essa declaração na OnClientClick
propriedade: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 o UpdatePanel no ASP Frontend. Em seguida, digite o nome UpdatePanel e 'nome da função' definido com as tags de script.
Obrigado "Liko", basta adicionar um comentário à sua resposta.
string jsFunc = "myFunc(" + MyBackValue + ")";
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "myJsFn", jsFunc, true);
Adicionadas aspas simples ( '
) à variável, caso contrário, será exibida uma mensagem de erro:
string jsFunc = "myFunc('" + MyBackValue + "')";
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ê pode expor os métodos C # nas páginas de código atrás para serem chamados via JavaScript usando o atributo ScriptMethod .
Você não pode chamar JavaScript de um CodeBehind - esse código existe apenas no cliente.