Aufruf der JavaScript-Funktion von CodeBehind


Antworten:


206

Sie können dies versuchen:

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

41
Ich würde für den ScriptManager.RegisterStartupScript (Seite, Typ (Seite), "somekey", Skript, true) gehen; Ansatz. Es funktioniert auch bei Teilpostbacks.
rdmptn

10
1. Manchmal 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)
BornToCode

2
ScriptManager.RegisterStartupScript(this.Page, typeof(Page), "text", "openDep()", true);funktioniert. this.GetType()wirft einen Fehler für mich.
SearchForKnowledge

2
Dies funktioniert nicht, wenn der Code mit einem umschlossen asp:UpdatePanelund in ein Schaltflächenereignis geschrieben ist. Dadurch wird die Seite zurückgesetzt.
Senura Dissanayake

52

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.


51

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

Wenn Sie versuchen, dies zu tun, wenn auf eine GridView-Zeile geklickt wird, funktioniert dies nur, wenn Sie ScriptManagerwie in dieser Antwort verwenden, nicht Page.ClientScriptwie in anderen Antworten. Könnte mit dem asp:UpdatePanelKommentar unter der akzeptierten Antwort zusammenhängen.
Chris

16

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.

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 eines ScriptManagerauf demPage

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

Schritt 3: Aufrufen der Methode mit JavaScript

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

Wo platzieren Sie Schritt eins in der MVC 3-Dateihierarchie?
Rob

@Rob Die 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 .
Vapcguy

15

Wenn Sie einen Wert als Parameter senden müssen.

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

8

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

7

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.


65
"Das kannst du nicht. Aber so machst du es."

3
Ich würde das Aufrufen einer Methode aus dem serverseitigen Code nicht in Betracht ziehen, da Sie keine echte Möglichkeit haben, einen Rückgabewert abzurufen oder einen Rückruf anzugeben.
ThiefMaster

8
Oh, sicher kannst du. Sie können ein Postback von Ihrem Javascript oder AJAX alles zurückrufen. Ich dachte, es war lustig; Ich neige dazu, dasselbe zu tun - "Nein, das ist unmöglich. Niemand würde das überhaupt wollen, wenn er könnte." dann ein paar Minuten später "Also hier ist, wie wir es machen werden."

7

Sie können wörtlich verwenden:

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

1
Aber fügt dies nicht einfach ein Skript in den Speicher ein, sondern führt es auch nicht aus?
Fandango68


5

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>

4
ScriptManager.RegisterStartupScript(this, this.Page.GetType(),"updatePanel1Script", "javascript:ConfirmExecute()",true/>

8
Fügen Sie einige Erklärung hinzu
Ketan

4

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

  1. Code und HTML befinden sich möglicherweise nicht im selben Namespace
  2. CodeBehind="History.aspx.cs" zeigt auf eine falsche Seite
  3. Die JS-Funktion weist einen Fehler auf

3

Ich 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


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

Die Verwendung Ihrer Funktion ist ausreichend


2
Können Sie Ihre Antwort etwas näher erläutern?
Maxpaj

1
Was ist dieser "JavaFunction" -Parameter? Können wir etwas hinzufügen? Was muss in diesem Argument enthalten sein?
Senura Dissanayake

1
@ SenuraDissanayake Es ist ein Titel - ja, es kann alles sein und spielt keine Rolle.
Vapcguy

2

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

1

das funktioniert bei mir

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

1

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


0

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.


0

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 + "')";

-1

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.


1
Sie können eine Javascript-Funktion nicht direkt wie in myCoolJavascriptFunction (javascriptFunctionArgs) aufrufen. Auf dem Server können Sie jedoch eine Javascript-Funktion aus dem Code auf einer WebForms-Seite aufrufen.
bis

vereinbart mit cloudstrifebro
Khurram Ishaque

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.