Risposte:
Puoi provare questo:
Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);
Page.ClientScript.RegisterClientScriptBlockè necessario invece vedere questo post per informazioni . 2. Vale la pena ricordare che per far funzionare MyFunction (), MyFunction () deve essere definito prima dei tag del modulo o al loro interno, ma NON dopo il tag di chiusura </form> (altrimenti un errore previsto dell'oggetto si verifica)
ScriptManager.RegisterStartupScript(this.Page, typeof(Page), "text", "openDep()", true);lavori. this.GetType()genera un errore per me.
asp:UpdatePanele scritto in un evento pulsante. Ciò provoca il postback della pagina.
C # su JavaScript: puoi registrare il blocco di script da eseguire sulla pagina come segue:
ClientScript.RegisterStartupScript(GetType(),"hwa","alert('Hello World');",true);
sostituire la alert()parte con il nome della funzione.
Per chiamare il metodo C # da JavaScript puoi usare ScriptManagero jQuery. Io personalmente uso jQuery. È necessario decorare il metodo che si desidera chiamare da JavaScript con WebMethodattributo. Per ulteriori informazioni sulla chiamata del metodo C # (chiamato PageMethod) da jQueryte, puoi fare riferimento al post di Dave Ward .
Chiamare una funzione JavaScript dal codice dietro
Passaggio 1 Aggiungi il tuo codice Javascript
<script type="text/javascript" language="javascript">
function Func() {
alert("hello!")
}
</script>
Step 2 Aggiungere 1 Gestore script nella vostra WebForm e aggiungere 1 pulsante di troppo
Passaggio 3 Aggiungere questo codice nell'evento clic pulsante
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Func()", true);
ScriptManagercome in questa risposta, non Page.ClientScriptcome in altre risposte. Potrebbe essere correlato al asp:UpdatePanelcommento sotto la risposta accettata.
Non puoi farlo direttamente. In WebForm standard JavaScript è interpretato dal browser e C # dal server. Quello che puoi fare per chiamare un metodo dal server usando JavaScript è.
WebMethodcome attributenei metodi target.ScriptManagerimpostazione EnablePageMethodscome true.PageMethods.Come questo:
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
}
ScriptManagersuPage<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
function GetProductsByCategoryID(categoryID)
{
PageMethods.GetProducts(categoryID, OnGetProductsComplete);
}
Dai un'occhiata a questo link.
Per chiamare una funzione JavaScript dal server è possibile utilizzare RegisterStartupScript:
ClientScript.RegisterStartupScript(GetType(),"id","callMyJSFunction()",true);
GetProducts()funzione è solo una funzione code-behind che risiederebbe in un controller in un'app MVC, quindi i tag vanno al di sopra di qualunque funzione tu voglia inserire in un controller che intendi chiamare da JavaScript .
Un'altra cosa che potresti fare è creare una variabile di sessione che viene impostata nel codice dietro e quindi controllare lo stato di quella variabile e quindi eseguire il tuo javascript. La cosa buona è che questo ti permetterà di eseguire il tuo script proprio dove vuoi invece di dover capire se vuoi che venga eseguito nel DOM o globalmente.
Qualcosa del genere: Codice dietro:
Session["newuser"] = "false"
In javascript
var newuser = '<%=Session["newuser"]%>';
if (newuser == "yes")
startTutorial();
Non puoi. Codebehind è in esecuzione sul server mentre JavaScript è in esecuzione sul client.
Tuttavia, è possibile aggiungere <script type="text/javascript">someFunction();</script>all'output e quindi chiamare la funzione JS quando il browser analizza il markup.
Puoi usare letterale:
this.Controls.Add(new LiteralControl("<script type='text/javascript'>myFunction();</script>"));
Il codice IIRC dietro è compilato sul lato server e javascript è interpretato sul lato client. Ciò significa che non esiste un collegamento diretto tra i due.
Quello che puoi fare d'altra parte è far comunicare il client e il server tramite uno strumento ingegnoso chiamato AJAX. http://en.wikipedia.org/wiki/Asynchronous_JavaScript_and_XML
Prova questo in Code Behind e funzionerà al 100%
Scrivi questa riga di codice nel file Code Behind
string script = "window.onload = function() { YourJavaScriptFunctionName(); };";
ClientScript.RegisterStartupScript(this.GetType(), "YourJavaScriptFunctionName", script, true);
E questa è la pagina del modulo web
<script type="text/javascript">
function YourJavaScriptFunctionName() {
alert("Test!")
}
</script>
ScriptManager.RegisterStartupScript(this, this.Page.GetType(),"updatePanel1Script", "javascript:ConfirmExecute()",true/>
Esempio di lavoro: _
<%@ 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>
Codice dietro
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);
}
}
}
Possibili insidie: -
CodeBehind="History.aspx.cs" punta a una pagina sbagliataHo notato che molte delle risposte qui stanno usando ScriptManager.RegisterStartupScripte se hai intenzione di farlo, non è il modo giusto di farlo. Il modo giusto è usare ScriptManager.RegisterScriptBlock([my list of args here]). Il motivo è che dovresti usare RegisterStartupScript solo quando la tua pagina viene caricata (da qui il nome RegisterStartupScript).
In VB.NET:
ScriptManager.RegisterClientScriptBlock(Page, GetType(String), "myScriptName" + key, $"myFunctionName({someJavascriptObject})", True)
in C #:
ScriptManager.RegisterClientScriptBlock(Page, typeof(string), "myScriptName" + key, $"myFunctionName({someJavascriptObject})", true);
Naturalmente, spero che sia ovvio che devi sostituire la chiave con il tuo identificatore di chiave e probabilmente dovresti spostare tutto questo in un sub / funzione / metodo e passare la chiave e un po 'di JavaScript (se il tuo metodo javascript richiede che il tuo arg sia un oggetto javascript).
Documenti MSDN:
https://msdn.microsoft.com/en-us/library/bb338357(v=vs.110).aspx
ScriptManager.RegisterStartupScript(Page, GetType(), "JavaFunction", "AlertError();", true);
usare la tua funzione è sufficiente
È così che l'ho fatto.
Il markup HTML che mostra un'etichetta e un controllo pulsante è il seguente.
<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>
La funzione JavaScript è qui.
<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>
Il codice dietro per attivare la funzione JavaScript è qui.
lblJavaScript.Text = "<script type='text/javascript'>showDialogue();</script>";
questo funziona per me
object Json_Object=maintainerService.Convert_To_JSON(Jobitem);
ScriptManager.RegisterClientScriptBlock(this,GetType(), "Javascript", "SelectedJobsMaintainer("+Json_Object+"); ",true);
Dal momento che non riuscivo a trovare una soluzione che fosse il codice dietro, che include provare il ClientScripteScriptManager come mutanic e Orlando Herrera ha detto in questa domanda (entrambi in qualche modo fallito), io offrire una soluzione front-end che utilizza i clic sui pulsanti per gli altri se sono nella mia stessa posizione. Questo ha funzionato per me:
Markup HTML:
<asp:button ID="myButton" runat="server" Text="Submit" OnClientClick="return myFunction();"></asp:button>
JavaScript:
function myFunction() {
// Your JavaScript code
return false;
}
Sto semplicemente usando un pulsante ASP.NET che utilizza la OnClientClickproprietà, che attiva le funzioni di scripting sul lato client, ovvero JavaScript. Le cose chiave da notare qui sono gli usi della returnparola chiave nella chiamata di funzione e nella funzione stessa. Ho letto documenti che non usano returnma che fanno comunque funzionare il pulsante, in qualche modo non ha funzionato per me. L' return false;istruzione nella funzione specifica che un postback NON dovrebbe accadere. È inoltre possibile utilizzare tale istruzione nella OnClientClickproprietà:OnClientClick="myFunction() return false;"
Ho usato ScriptManager in Code Behind e ha funzionato bene.
ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "CallMyFunction", "confirm()", true);
Se si utilizza UpdatePanel in ASP Frontend. Quindi, inserisci il nome UpdatePanel e il 'nome funzione' definito con i tag di script.
Grazie "Liko", basta aggiungere un commento alla sua risposta.
string jsFunc = "myFunc(" + MyBackValue + ")";
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "myJsFn", jsFunc, true);
Aggiunte virgolette singole ( ') alla variabile, altrimenti verrà visualizzato un messaggio di errore:
string jsFunc = "myFunc('" + MyBackValue + "')";
Non è possibile chiamare una funzione Javascript da CodeBehind, poiché il file CodeBehind contiene il codice che esegue il lato server sul server Web. Il codice Javascript viene eseguito nel browser Web sul lato client.
È possibile esporre i metodi C # sulle pagine codebehind per essere richiamabili tramite JavaScript utilizzando l' attributo ScriptMethod .
Non puoi chiamare JavaScript da un CodeBehind - quel codice esiste solo sul client.