it-swarm.com.de

Aufrufen der JavaScript-Funktion von Code Behind

Kann jemand gute Beispiele für das Aufrufen einer JavaScript-Funktion von Code Behind und umgekehrt geben?

131
ssmsnet

Sie können dies versuchen:

Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);
180
mutanic

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.

47
TheVillageIdiot

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);
44
Orlando Herrera

Wenn Sie einen Wert als Parameter senden müssen.

string jsFunc = "myFunc(" + MyBackValue + ")";
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "myJsFn", jsFunc, true);
12
Liko

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.

So was:

Schritt 1

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 
    }

Schritt 2: Hinzufügen einer ScriptManager zur Page

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />

Schritt 3: Aufrufen der Methode mit JavaScript

function GetProductsByCategoryID(categoryID)
{
    PageMethods.GetProducts(categoryID, OnGetProductsComplete);
}

Schau dir diesen Link an.

Um eine JavaScript-Funktion vom Server aus aufzurufen, können Sie RegisterStartupScript verwenden:

ClientScript.RegisterStartupScript(GetType(),"id","callMyJSFunction()",true);
11
Vismari

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.

7
ThiefMaster

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

Sie können wörtliche verwenden:

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

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

5

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: - 

  1. Code und HTML befinden sich möglicherweise nicht im selben Namespace
  2. CodeBehind="History.aspx.cs" zeigt auf eine falsche Seite
  3. JS-Funktion hat einen Fehler
4
Hitesh Sahu
ScriptManager.RegisterStartupScript(this, this.Page.GetType(),"updatePanel1Script", "javascript:ConfirmExecute()",true/>
4
Apps Tawale

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

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

Ihre Funktion reicht aus

1
sadist king

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

das funktioniert für mich 

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

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.

1
Josh Kodroff

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.

0
Ravi Agrawal

Versuchen Sie dies in Code Behind und es wird 100% funktionieren

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

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.

0
Charlie Kilian

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

0
Max Voisard