Jawaban:
Anda dapat mencoba ini:
Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);
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)
ScriptManager.RegisterStartupScript(this.Page, typeof(Page), "text", "openDep()", true);bekerja. this.GetType()melempar kesalahan untuk saya.
asp:UpdatePaneldan ditulis dalam acara tombol. Yang menyebabkan halaman untuk dipundurkan.
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 .
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);
ScriptManagerseperti dalam jawaban ini, bukan Page.ClientScriptseperti pada jawaban lainnya. Mungkin terkait dengan asp:UpdatePanelkomentar di bawah jawaban yang diterima.
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.
WebMethodseperti attributedalam metode target.ScriptManagerpengaturan EnablePageMethodssebagai true.PageMethods.Seperti ini:
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
}
ScriptManagerpadaPage<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
function GetProductsByCategoryID(categoryID)
{
PageMethods.GetProducts(categoryID, OnGetProductsComplete);
}
Untuk memanggil fungsi JavaScript dari server, Anda dapat menggunakan RegisterStartupScript:
ClientScript.RegisterStartupScript(GetType(),"id","callMyJSFunction()",true);
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 .
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();
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.
Anda dapat menggunakan literal:
this.Controls.Add(new LiteralControl("<script type='text/javascript'>myFunction();</script>"));
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
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>
ScriptManager.RegisterStartupScript(this, this.Page.GetType(),"updatePanel1Script", "javascript:ConfirmExecute()",true/>
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: -
CodeBehind="History.aspx.cs" menunjuk ke halaman yang salahSaya 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
ScriptManager.RegisterStartupScript(Page, GetType(), "JavaFunction", "AlertError();", true);
menggunakan fungsi Anda sudah cukup
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>";
ini bekerja untuk saya
object Json_Object=maintainerService.Convert_To_JSON(Jobitem);
ScriptManager.RegisterClientScriptBlock(this,GetType(), "Javascript", "SelectedJobsMaintainer("+Json_Object+"); ",true);
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;"
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.
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 + "')";
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.
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.