Antworten:
Sie können dies versuchen:
Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);
Page.ClientScript.RegisterClientScriptBlockist stattdessen erforderlich, stattdessen lesen Sie diesen Beitrag für Informationen . 2. Es kann erwähnenswert sein, dass MyFunction () vor den Formular-Tags oder innerhalb der Formular-Tags definiert werden muss, damit MyFunction () funktioniert, jedoch NICHT nach dem End-Tag </ form> (andernfalls wird ein Objekt-Fehler erwartet auftreten)
ScriptManager.RegisterStartupScript(this.Page, typeof(Page), "text", "openDep()", true);funktioniert. this.GetType()wirft einen Fehler für mich.
asp:UpdatePanelund in ein Schaltflächenereignis geschrieben ist. Dadurch wird die Seite zurückgesetzt.
C # zu JavaScript: Sie können den Skriptblock registrieren, um ihn auf einer Seite wie folgt auszuführen:
ClientScript.RegisterStartupScript(GetType(),"hwa","alert('Hello World');",true);
Ersetzen Sie das alert()Teil durch Ihren Funktionsnamen.
Zum Aufrufen der C # -Methode aus JavaScript können Sie ScriptManageroder verwenden jQuery. Ich persönlich benutze jQuery. Sie müssen die Methode, die Sie aus JavaScript aufrufen möchten, mit WebMethodAttributen dekorieren . Weitere Informationen zum Aufrufen der C # -Methode (aufgerufen PageMethod) finden jQuerySie in Dave Wards Beitrag.
Aufruf einer JavaScript-Funktion aus dem Code dahinter
Schritt 1 Fügen Sie Ihren Javascript-Code hinzu
<script type="text/javascript" language="javascript">
function Func() {
alert("hello!")
}
</script>
Schritt 2 Fügen Sie 1 Skript-Manager in Ihre WebForm ein und klicken Sie auf die Schaltfläche 1 hinzufügen zu
Schritt 3 Fügen Sie diesen Code in Ihr Schaltflächenklickereignis ein
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Func()", true);
ScriptManagerwie in dieser Antwort verwenden, nicht Page.ClientScriptwie in anderen Antworten. Könnte mit dem asp:UpdatePanelKommentar unter der akzeptierten Antwort zusammenhängen.
Sie können dies nicht direkt tun. In Standard-WebForms wird JavaScript vom Browser und C # vom Server interpretiert. Sie können eine Methode mithilfe von JavaScript vom Server aus aufrufen.
WebMethodwie attributebei Zielmethoden.ScriptManagerEinstellung hinzufügen EnablePageMethodsals true.PageMethods.So was:
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
}
ScriptManagerauf demPage<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
function GetProductsByCategoryID(categoryID)
{
PageMethods.GetProducts(categoryID, OnGetProductsComplete);
}
Schauen Sie sich diesen Link an.
Um eine JavaScript-Funktion vom Server aufzurufen, können Sie Folgendes verwenden RegisterStartupScript:
ClientScript.RegisterStartupScript(GetType(),"id","callMyJSFunction()",true);
GetProducts()Funktion ist nur eine Code- Behind -Funktion, die in einem Controller in einer MVC-App ausgeführt wird. Die Tags werden also über die Funktionen gesetzt, die Sie in einen Controller einfügen möchten, den Sie über JavaScript aufrufen möchten .
Sie können auch eine Sitzungsvariable erstellen, die im Code dahinter festgelegt wird, den Status dieser Variablen überprüfen und dann Ihr Javascript ausführen. Das Gute daran ist, dass Sie Ihr Skript genau dort ausführen können, wo Sie möchten, anstatt herausfinden zu müssen, ob es im DOM oder global ausgeführt werden soll.
So etwas wie das: Code dahinter:
Session["newuser"] = "false"
In Javascript
var newuser = '<%=Session["newuser"]%>';
if (newuser == "yes")
startTutorial();
Du kannst nicht. Codebehind wird auf dem Server ausgeführt, während JavaScript auf dem Client ausgeführt wird.
Sie können jedoch <script type="text/javascript">someFunction();</script>zu Ihrer Ausgabe hinzufügen und so die JS-Funktion aufrufen, wenn der Browser Ihr Markup analysiert.
Sie können wörtlich verwenden:
this.Controls.Add(new LiteralControl("<script type='text/javascript'>myFunction();</script>"));
IIRC Code Behind wird serverseitig kompiliert und Javascript wird clientseitig interpretiert. Dies bedeutet, dass es keine direkte Verbindung zwischen den beiden gibt.
Auf der anderen Seite können Client und Server über ein nützliches Tool namens AJAX kommunizieren. http://en.wikipedia.org/wiki/Asynchronous_JavaScript_and_XML
Versuchen Sie dies in Code Behind und es wird 100% funktionieren
Schreiben Sie diese Codezeile in Ihre Code Behind-Datei
string script = "window.onload = function() { YourJavaScriptFunctionName(); };";
ClientScript.RegisterStartupScript(this.GetType(), "YourJavaScriptFunctionName", script, true);
Und das ist die Webformularseite
<script type="text/javascript">
function YourJavaScriptFunctionName() {
alert("Test!")
}
</script>
ScriptManager.RegisterStartupScript(this, this.Page.GetType(),"updatePanel1Script", "javascript:ConfirmExecute()",true/>
Arbeitsbeispiel: _
<%@ 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>
Code dahinter
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);
}
}
}
Mögliche Fallstricke: -
CodeBehind="History.aspx.cs" zeigt auf eine falsche SeiteIch habe bemerkt, dass viele der Antworten hier verwendet werden, ScriptManager.RegisterStartupScriptund wenn Sie das tun, ist das nicht der richtige Weg, dies zu tun. Der richtige Weg ist zu verwendenScriptManager.RegisterScriptBlock([my list of args here]) . Der Grund dafür ist, dass Sie RegisterStartupScript nur verwenden sollten, wenn Ihre Seite geladen wird (daher der Name 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);
Natürlich hoffe ich, dass Sie den Schlüssel durch Ihre Schlüsselkennung ersetzen müssen und dies wahrscheinlich in eine Unterfunktion / Methode / Methode verschieben und den Schlüssel und ein JavascriptObject übergeben sollten (wenn Ihre Javascript-Methode erfordert, dass Ihr Argument ein ist Javascript-Objekt).
MSDN-Dokumente:
https://msdn.microsoft.com/en-us/library/bb338357(v=vs.110).aspx
ScriptManager.RegisterStartupScript(Page, GetType(), "JavaFunction", "AlertError();", true);
Die Verwendung Ihrer Funktion ist ausreichend
So habe ich es gemacht.
Das HTML-Markup mit einem Beschriftungs- und Schaltflächensteuerelement lautet wie folgt.
<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>
Die JavaScript-Funktion ist hier.
<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>
Code dahinter zum Auslösen der JavaScript-Funktion ist hier.
lblJavaScript.Text = "<script type='text/javascript'>showDialogue();</script>";
das funktioniert bei mir
object Json_Object=maintainerService.Convert_To_JSON(Jobitem);
ScriptManager.RegisterClientScriptBlock(this,GetType(), "Javascript", "SelectedJobsMaintainer("+Json_Object+"); ",true);
Da ich keine Lösung finden konnte, hinter der Code steckt, beinhaltet das Ausprobieren des ClientScriptundScriptManager wie mutanic und Orlando Herrera in dieser Frage (beide sind irgendwie gescheitert), biete ich anderen eine Front-End-Lösung an, die Tastenklicks verwendet, wenn Sie sind in der gleichen Position wie ich. Das hat bei mir funktioniert:
HTML-Markup:
<asp:button ID="myButton" runat="server" Text="Submit" OnClientClick="return myFunction();"></asp:button>
JavaScript:
function myFunction() {
// Your JavaScript code
return false;
}
Ich verwende einfach eine ASP.NET-Schaltfläche, die die OnClientClickEigenschaft verwendet, die clientseitige Skriptfunktionen auslöst, nämlich JavaScript. Die wichtigsten Dinge, die hier zu beachten sind, sind die Verwendungen des returnSchlüsselworts im Funktionsaufruf und in der Funktion selbst. Ich habe Dokumente gelesen, die nicht verwendet werden, returnaber trotzdem die Schaltfläche zum Klicken erhalten - irgendwie hat es bei mir nicht funktioniert. Die return false;Anweisung in der Funktion gibt an, dass ein Postback NICHT stattfinden soll. Sie können diese Anweisung auch in der OnClientClickEigenschaft verwenden:OnClientClick="myFunction() return false;"
Ich habe ScriptManager in Code Behind verwendet und es hat gut funktioniert.
ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "CallMyFunction", "confirm()", true);
Wenn Sie UpdatePanel im ASP-Frontend verwenden. Geben Sie dann den mit Skript-Tags definierten UpdatePanel-Namen und 'Funktionsnamen' ein.
Danke "Liko", füge einfach einen Kommentar zu seiner Antwort hinzu.
string jsFunc = "myFunc(" + MyBackValue + ")";
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "myJsFn", jsFunc, true);
Einfache Anführungszeichen ( ') zur Variablen hinzugefügt , andernfalls wird eine Fehlermeldung ausgegeben:
string jsFunc = "myFunc('" + MyBackValue + "')";
Sie können keine Javascript-Funktion über CodeBehind aufrufen, da die CodeBehind-Datei den Code enthält, der die Serverseite auf dem Webserver ausführt. Javascript-Code wird im Webbrowser auf der Clientseite ausgeführt.
Mithilfe des ScriptMethod-Attributs können Sie C # -Methoden auf Codebehind-Seiten so verfügbar machen, dass sie über JavaScript aufgerufen werden können .
Sie können JavaScript nicht von einem CodeBehind aus aufrufen - dieser Code ist ausschließlich auf dem Client vorhanden.