Memanggil Fungsi JavaScript Dari CodeBehind

150

Adakah yang bisa memberikan contoh yang baik memanggil fungsi JavaScript Dari CodeBehind dan sebaliknya?

ssmsnet
sumber
Inilah artikel terperinci codepedia.info/... menggunakan dengan dan tanpa Ajax Update Panel
Satinder singh

Jawaban:

206

Anda dapat mencoba ini:

Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);
mutan
sumber
41
Saya akan pergi untuk ScriptManager.RegisterStartupScript (Halaman, typeof (Halaman), "somekey", skrip, true); pendekatan. Ia bekerja selama postback parsial juga.
rdmptn
10
1. Kadang Page.ClientScript.RegisterClientScriptBlock- kadang diperlukan sebagai gantinya lihat posting ini untuk info . 2. Mungkin perlu disebutkan bahwa agar MyFunction () berfungsi, MyFunction () harus didefinisikan sebelum tag formulir atau di dalamnya, tetapi BUKAN setelah tag akhir </form> (jika tidak, kesalahan yang diharapkan Objek akan terjadi)
BornToCode
2
ScriptManager.RegisterStartupScript(this.Page, typeof(Page), "text", "openDep()", true);bekerja. this.GetType()melempar kesalahan untuk saya.
SearchForKnowledge
2
Ini tidak berfungsi ketika kode dibungkus dengan asp:UpdatePaneldan ditulis dalam acara tombol. Yang menyebabkan halaman untuk dipundurkan.
Senura Dissanayake
52

C # ke JavaScript: Anda dapat mendaftarkan blok skrip untuk dijalankan di halaman seperti berikut:

ClientScript.RegisterStartupScript(GetType(),"hwa","alert('Hello World');",true);

ganti alert()bagian dengan nama fungsi Anda.

Untuk memanggil metode C # dari JavaScript, Anda dapat menggunakan ScriptManageratau jQuery. Saya pribadi menggunakan jQuery. Anda perlu menghias metode yang ingin Anda panggil dari JavaScript dengan WebMethodatribut. Untuk informasi lebih lanjut tentang memanggil metode C # (dipanggil PageMethod) dari jQueryAnda dapat merujuk ke pos Dave Ward .

TheVillageIdiot
sumber
51

Memanggil fungsi JavaScript dari kode di belakang

Langkah 1 Tambahkan kode Javascript Anda

<script type="text/javascript" language="javascript">
    function Func() {
        alert("hello!")
    }
</script>

Langkah 2 Tambahkan 1 Script Manager di webForm Anda dan Tambahkan tombol 1 juga

Langkah 3 Tambahkan kode ini di acara klik tombol Anda

ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Func()", true);
Orlando Herrera
sumber
Ketika mencoba melakukan ini ketika baris GridView diklik, itu hanya berfungsi ketika menggunakan ScriptManagerseperti dalam jawaban ini, bukan Page.ClientScriptseperti pada jawaban lainnya. Mungkin terkait dengan asp:UpdatePanelkomentar di bawah jawaban yang diterima.
Chris
16

Anda tidak dapat melakukan ini secara langsung. Dalam WebForms standar JavaScript diinterpretasikan oleh browser dan C # oleh server. Apa yang dapat Anda lakukan untuk memanggil metode dari server menggunakan JavaScript adalah.

Seperti ini:

Langkah 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 
    }

Langkah 2: Menambahkan ScriptManagerpadaPage

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

Langkah 3: Memanggil metode menggunakan JavaScript

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

Lihatlah tautan ini.

Untuk memanggil fungsi JavaScript dari server, Anda dapat menggunakan RegisterStartupScript:

ClientScript.RegisterStartupScript(GetType(),"id","callMyJSFunction()",true);
Vismari
sumber
Di mana Anda menempatkan langkah pertama dalam hierarki file MVC 3?
Rob
@Rob GetProducts()Fungsi ini hanyalah fungsi kode-belakang yang akan hidup dalam pengontrol di aplikasi MVC, jadi tag tersebut berada di atas fungsi apa pun yang ingin Anda masukkan ke pengontrol yang ingin Anda panggil dari JavaScript .
vapcguy
15

Jika Anda perlu mengirim nilai sebagai parameter.

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

Hal lain yang bisa Anda lakukan adalah membuat variabel sesi yang diatur dalam kode di belakang dan kemudian memeriksa keadaan variabel itu dan kemudian menjalankan javascript Anda. Hal baiknya adalah ini akan memungkinkan Anda untuk menjalankan skrip Anda tepat di tempat yang Anda inginkan daripada harus mencari tahu apakah Anda ingin menjalankannya di DOM atau secara global.

Sesuatu seperti ini: Kode di belakang:

Session["newuser"] = "false" 

Dalam javascript

var newuser = '<%=Session["newuser"]%>';
 if (newuser == "yes")
     startTutorial();  
Prakash Joshi
sumber
7

Kamu tidak bisa. Codebehind berjalan di server saat JavaScript berjalan di klien.

Namun, Anda dapat menambah <script type="text/javascript">someFunction();</script>output Anda dan dengan demikian menyebabkan fungsi JS dipanggil ketika browser mem-parsing markup Anda.

Pencuri
sumber
65
"Kamu tidak bisa. Tapi begini caramu melakukannya."
3
Saya tidak akan mempertimbangkan memanggil metode dari kode sisi server karena Anda tidak memiliki cara nyata untuk mendapatkan nilai balik atau menentukan panggilan balik.
ThiefMaster
8
Ah, tentu Anda bisa. Anda dapat memanggil postback dari javascript atau AJAX Anda kembali. Saya pikir itu lucu; Saya cenderung melakukan hal yang sama - "Tidak, itu tidak mungkin. Tidak ada yang mau melakukannya jika mereka bisa." lalu beberapa menit kemudian, "Jadi, inilah cara kami akan melakukannya."
7

Anda dapat menggunakan literal:

this.Controls.Add(new LiteralControl("<script type='text/javascript'>myFunction();</script>"));
Dilip Kumar Yadav
sumber
1
Tapi bukankah ini hanya menambahkan skrip ke dalam memori, itu tidak benar-benar menjalankannya juga?
Fandango68
5

IIRC Code Behind dikompilasi di sisi server dan javascript diartikan sebagai sisi klien. Ini berarti tidak ada tautan langsung antara keduanya.

Yang dapat Anda lakukan di sisi lain adalah membuat klien dan server berkomunikasi melalui alat yang bagus yang disebut AJAX. http://en.wikipedia.org/wiki/Asynchronous_JavaScript_and_XML

Berry Ligtermoet
sumber
5

Coba ini dalam Code Behind dan itu akan bekerja 100%

Tulis baris kode ini di file Code Behind Anda

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

Dan ini adalah halaman formulir web

<script type="text/javascript">
    function YourJavaScriptFunctionName() {
        alert("Test!")
    }
</script>
Chandan Kumar
sumber
4
ScriptManager.RegisterStartupScript(this, this.Page.GetType(),"updatePanel1Script", "javascript:ConfirmExecute()",true/>
Aplikasi Tawale
sumber
8
Tambahkan beberapa penjelasan
ketan
4

Contoh Kerja: _

<%@ 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>

Kode di Balik

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

    }
}

Kemungkinan jebakan: -

  1. Kode dan HTML mungkin tidak berada dalam namespace yang sama
  2. CodeBehind="History.aspx.cs" menunjuk ke halaman yang salah
  3. Fungsi JS mengalami beberapa kesalahan
Hitesh Sahu
sumber
3

Saya telah memperhatikan banyak jawaban di sini menggunakan ScriptManager.RegisterStartupScriptdan jika Anda akan melakukan itu, itu bukan cara yang tepat untuk melakukannya. Cara yang benar adalah menggunakan ScriptManager.RegisterScriptBlock([my list of args here]). Alasannya adalah Anda seharusnya hanya menggunakan RegisterStartupScript ketika halaman Anda dimuat (maka nama RegisterStartupScript).

Di VB.NET:

ScriptManager.RegisterClientScriptBlock(Page, GetType(String), "myScriptName" + key, $"myFunctionName({someJavascriptObject})", True)

dalam C #:

ScriptManager.RegisterClientScriptBlock(Page, typeof(string), "myScriptName" + key, $"myFunctionName({someJavascriptObject})", true);

Tentu saja, saya harap tidak perlu dikatakan bahwa Anda perlu mengganti kunci dengan pengenal kunci Anda dan mungkin harus memindahkan semua ini ke dalam sub / fungsi / metode dan memasukkan kunci dan beberapa JavascriptObject (jika metode javascript Anda mengharuskan arg Anda adalah objek javascript).

Dokumen MSDN:

https://msdn.microsoft.com/en-us/library/bb338357(v=vs.110).aspx

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

menggunakan fungsi Anda sudah cukup

raja sadis
sumber
2
Bisakah Anda jelaskan jawaban Anda lebih banyak?
maksimal
1
Apa parameter "JavaFunction" ini? Bisakah kita menambahkan sesuatu di dalamnya? Apa yang perlu ada dalam argumen itu?
Senura Dissanayake
1
@SenuraDissanayake Ini judul-ya, itu bisa apa saja & tidak masalah.
vapcguy
2

Beginilah cara saya melakukannya.

Markup HTML yang menunjukkan label dan tombol kontrol adalah sebagai berikut.

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

Fungsi JavaScript ada di sini.

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

Kode di belakang untuk memicu fungsi JavaScript ada di sini.

lblJavaScript.Text = "<script type='text/javascript'>showDialogue();</script>";
evaaggy
sumber
1

ini bekerja untuk saya

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

Karena saya tidak dapat menemukan solusi yang kode di belakang, yang termasuk mencoba ClientScriptdan ScriptManagersuka mutanic dan Orlando Herrera mengatakan dalam pertanyaan ini (mereka berdua entah bagaimana gagal), saya akan menawarkan solusi front-end yang menggunakan klik tombol kepada orang lain jika mereka berada di posisi yang sama dengan saya. Ini bekerja untuk saya:

Markup HTML:

<asp:button ID="myButton" runat="server" Text="Submit" OnClientClick="return myFunction();"></asp:button>

JavaScript:

function myFunction() {
    // Your JavaScript code
    return false;
}

Saya hanya menggunakan tombol ASP.NET yang menggunakan OnClientClickproperti, yang menjalankan fungsi scripting sisi klien, yang menjadi JavaScript. Hal-hal penting yang perlu diperhatikan di sini adalah penggunaan returnkata kunci dalam panggilan fungsi dan fungsi itu sendiri. Saya telah membaca dokumen yang tidak digunakan returntetapi masih mendapatkan klik tombol berfungsi - entah bagaimana itu tidak berhasil untuk saya. The return false;pernyataan dalam fungsi menetapkan postback TIDAK harus terjadi. Anda juga bisa menggunakan pernyataan itu di OnClientClickproperti:OnClientClick="myFunction() return false;"

Max Voisard
sumber
0

Saya menggunakan ScriptManager dalam Code Behind dan bekerja dengan baik.

ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "CallMyFunction", "confirm()", true);

Jika Anda menggunakan UpdatePanel di ASP Frontend. Lalu, masukkan nama UpdatePanel dan 'nama fungsi' yang didefinisikan dengan tag skrip.

Ravi Agrawal
sumber
0

Terima kasih "Liko", cukup tambahkan komentar ke jawabannya.

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

Menambahkan tanda kutip tunggal ( ') ke variabel, jika tidak maka akan memberikan pesan kesalahan:

string jsFunc = "myFunc('" + MyBackValue + "')";
Stephen
sumber
-1

Anda tidak dapat memanggil fungsi Javascript dari CodeBehind, karena file CodeBehind berisi kode yang mengeksekusi sisi server pada server web. Kode Javascript dijalankan di browser web di sisi klien.

Charlie Kilian
sumber
1
Anda tidak dapat memanggil fungsi javascript secara langsung seperti di myCoolJavascriptFunction (javascriptFunctionArgs); di server, tetapi Anda dapat memanggil fungsi javascript dari kode di belakang di halaman WebForms.
cr1pto
setuju dengan cloudstrifebro
Khurram Ishaque
-1

Anda dapat mengekspos metode C # pada halaman kode untuk dapat dipanggil melalui JavaScript dengan menggunakan atribut ScriptMethod .

Anda tidak dapat memanggil JavaScript dari CodeBehind - kode itu hanya ada di klien.

Josh Kodroff
sumber