Kann jemand gute Beispiele für das Aufrufen einer JavaScript-Funktion von Code Behind und umgekehrt geben?
Sie können dies versuchen:
Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);
C # to JavaScript: Sie können den Skriptblock für die Ausführung auf einer Seite wie folgt registrieren:
ClientScript.RegisterStartupScript(GetType(),"hwa","alert('Hello World');",true);
ersetzen Sie alert()
durch Ihren Funktionsnamen.
Für den Aufruf der C # -Methode aus JavaScript können Sie ScriptManager
oder jQuery
verwenden. Ich persönlich benutze jQuery
. Sie müssen die Methode, die Sie mit JavaScript aufrufen möchten, mit dem Attribut WebMethod
dekorieren. Weitere Informationen zum Aufruf der C # -Methode (genannt PageMethod
) von jQuery
finden Sie unter Dave Ward's post.
Aufruf einer JavaScript-Funktion aus dem Code hinter
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 Script Manager in Ihre WebForm hinzu und fügen Sie die 1 Schaltfläche hinzu
Schritt 3 Fügen Sie diesen Code in Ihr Schaltflächenklickereignis ein
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Func()", true);
Wenn Sie einen Wert als Parameter senden müssen.
string jsFunc = "myFunc(" + MyBackValue + ")";
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "myJsFn", jsFunc, true);
Sie können dies nicht direkt tun. In Standard-WebForms wird JavaScript von Browser und C # von Server interpretiert. Was Sie tun können, um eine Methode mit JavaScript vom Server aufzurufen, ist.
WebMethod
als attribute
in den Zielmethoden. ScriptManager
setting EnablePageMethods
als true
hinzu.PageMethods
aufzurufen.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
}
ScriptManager
zur Page
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
function GetProductsByCategoryID(categoryID)
{
PageMethods.GetProducts(categoryID, OnGetProductsComplete);
}
Um eine JavaScript-Funktion vom Server aus aufzurufen, können Sie RegisterStartupScript
verwenden:
ClientScript.RegisterStartupScript(GetType(),"id","callMyJSFunction()",true);
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 somit die JS-Funktion aufrufen, wenn der Browser Ihr Markup analysiert.
Sie können auch eine Sitzungsvariable erstellen, die im Code dahinter gesetzt wird, und dann den Status dieser Variablen überprüfen und anschließend Ihr Javascript ausführen. Die gute Sache ist, dass Sie das Skript an der Stelle 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: Code dahinter:
Session["newuser"] = "false"
In Javascript
var newuser = '<%=Session["newuser"]%>';
if (newuser == "yes")
startTutorial();
Sie können wörtliche verwenden:
this.Controls.Add(new LiteralControl("<script type='text/javascript'>myFunction();</script>"));
IIRC Code Behind wird serverseitig kompiliert und Javascript wird clientseitig interpretiert. Das heißt, es gibt keine direkte Verbindung zwischen den beiden.
Was Sie dagegen tun können, ist die Kommunikation zwischen Client und Server über ein schickes Tool namens AJAX. http://en.wikipedia.org/wiki/Asynchronous_JavaScript_and_XML
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 hinter
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 SeiteScriptManager.RegisterStartupScript(this, this.Page.GetType(),"updatePanel1Script", "javascript:ConfirmExecute()",true/>
Ich habe festgestellt, dass viele der Antworten hier ScriptManager.RegisterStartupScript
verwenden. Wenn Sie das tun, ist das nicht der richtige Weg. Der richtige Weg ist die Verwendung von ScriptManager.RegisterScriptBlock([my list of args here])
. Der Grund 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);
Ich hoffe natürlich, dass es selbstverständlich ist, dass Sie den Schlüssel durch Ihre Schlüsselkennung ersetzen müssen und wahrscheinlich all dies in eine Unter/Funktion/Methode verschieben und den Schlüssel und someJavascriptObject übergeben müssen (falls Ihre Javascript-Methode erfordert, dass Ihr Argument ein Argument ist Javascript-Objekt).
MSDN-Dokumente:
https://msdn.Microsoft.com/de-de/library/bb338357(v=vs.110).aspx
ScriptManager.RegisterStartupScript(Page, GetType(), "JavaFunction", "AlertError();", true);
Ihre Funktion reicht aus
So habe ich es gemacht.
Das HTML-Markup mit einem Label- und Button-Steuerelement sieht wie folgt aus.
<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>
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, um die JavaScript-Funktion auszulösen, ist hier.
lblJavaScript.Text = "<script type='text/javascript'>showDialogue();</script>";
das funktioniert für mich
object Json_Object=maintainerService.Convert_To_JSON(Jobitem);
ScriptManager.RegisterClientScriptBlock(this,GetType(), "Javascript", "SelectedJobsMaintainer("+Json_Object+"); ",true);
Sie können C # -Methoden auf codebehind-Seiten mit dem Attribut ScriptMethod über JavaScript aufrufen.
Sie können kein JavaScript von einem CodeBehind aus aufrufen - dieser Code existiert nur auf dem Client.
Ich habe ScriptManager in Code Behind verwendet und es hat gut funktioniert.
ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "CallMyFunction", "confirm()", true);
Wenn Sie UpdatePanel in ASP Frontend ..__ verwenden, geben Sie den mit Script-Tags definierten UpdatePanel-Namen und Funktionsnamen ein.
Versuchen Sie dies in Code Behind und es wird 100% funktionieren
string script = "window.onload = function() { YourJavaScriptFunctionName(); };";
ClientScript.RegisterStartupScript(this.GetType(), "YourJavaScriptFunctionName", script, true);
Sie können keine JavaScript-Funktion über CodeBehind aufrufen, da die CodeBehind-Datei den Code enthält, der serverseitig auf dem Webserver ausgeführt wird. Javascript-Code wird auf der Clientseite im Webbrowser ausgeführt.
Da ich keine Lösung gefunden habe, bei der es sich um Code handelte, der das Ausprobieren von ClientScript
und ScriptManager
wie mutanic und Orlando Herrera in dieser Frage beinhaltet (beide sind irgendwie fehlgeschlagen), biete ich eine Front-End-Lösung an, bei der Tastenklicks verwendet werden andere, wenn sie in der gleichen Position sind 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 Eigenschaft OnClientClick
verwendet, mit der clientseitige Skriptfunktionen ausgelöst werden, bei denen es sich um JavaScript handelt. Die wichtigsten Dinge, die hier zu beachten sind, sind die Verwendungen des Schlüsselworts return
im Funktionsaufruf und in der Funktion selbst. Ich habe Dokumente gelesen, in denen return
nicht verwendet wird, aber die Schaltfläche funktioniert trotzdem - irgendwie hat es bei mir nicht funktioniert. Die Anweisung return false;
in der Funktion gibt an, dass ein Postback NICHT erfolgen soll. Sie können diese Anweisung auch in der Eigenschaft OnClientClick
verwenden: OnClientClick="myFunction() return false;"