CodeBehind'dan JavaScript İşlevini Çağırma


Yanıtlar:


206

Bunu deneyebilirsiniz:

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

41
ScriptManager.RegisterStartupScript (Page, typeof (Sayfa), "somekey", script, true) için gider; yaklaşmak. Kısmi geri dönüşler sırasında da çalışır.
rdmptn

10
1. Bazen Page.ClientScript.RegisterClientScriptBlockbunun yerine bilgi için bu gönderiye bakın . 2. MyFunction () işlevinin çalışması için MyFunction () öğesinin form etiketlerinden önce veya bunların içinde tanımlanması gerektiğini, ancak </form> bitiş etiketinden sonra DEĞİL olduğunu belirtmek gerekir (aksi takdirde bir Nesne beklenen hatası olacaktır) gerçekleşir)
BornToCode

2
ScriptManager.RegisterStartupScript(this.Page, typeof(Page), "text", "openDep()", true);İşler. this.GetType()benim için bir hata veriyor.
SearchForKnowledge

2
Kod asp:UpdatePanel, bir button olayı ile sarıldığında ve yazıldığında bu çalışmaz . Bu da sayfanın geri gönderilmesine neden olur.
Senura Dissanayake

52

C # to JavaScript: aşağıdaki gibi sayfada çalıştırmak için komut dosyası bloğunu kaydedebilirsiniz:

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

alert()parçayı işlev adınızla değiştirin .

JavaScript'ten C # yöntemini çağırmak için ScriptManagerveya tuşunu kullanabilirsiniz jQuery. Ben şahsen kullanıyorum jQuery. JavaScript'ten çağırmak istediğiniz yöntemi niteliğiyle dekore etmeniz gerekir WebMethod. C # yönteminin (çağrılan PageMethod) çağrılması hakkında daha fazla bilgi jQueryiçin Dave Ward'ın gönderisine bakabilirsiniz .


51

Arkadaki koddan bir JavaScript işlevini çağırma

Adım 1 Javascript kodunuzu ekleyin

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

Adım 2 WebForm'unuza 1 Script Manager ekleyin ve 1 düğmesini de ekleyin

Adım 3 Düğme tıklama etkinliğinize bu kodu ekleyin

ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Func()", true);

Bir GridView satırı tıklatıldığında bunu yapmaya çalışırken , diğer yanıtlarda olduğu gibi ScriptManagerdeğil, yalnızca bu yanıtta Page.ClientScriptolduğu gibi kullanılır. asp:UpdatePanelKabul edilen cevap altındaki yorum ile ilgili olabilir .
Chris

16

Bunu doğrudan yapamazsınız. Standart WebForms'da JavaScript tarayıcı ve C # sunucu tarafından yorumlanır. JavaScript kullanarak sunucudan bir yöntemi çağırmak için ne yapabilirsiniz.

Bunun gibi:

Aşama 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 
    }

Adım 2: Bir ekleme ScriptManagerüzerinePage

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

3. Adım: Yöntemi JavaScript kullanarak çağırma

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

Bu bağlantıya bir göz atın.

Sunucudan bir JavaScript işlevi çağırmak için şunları kullanabilirsiniz RegisterStartupScript:

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

MVC 3 dosya hiyerarşisinde birinci adımı nereye yerleştirirsiniz?
Rob

@Rob GetProducts()İşlevi, bir MVC uygulamasındaki bir denetleyicide yaşayacak bir kodun arkasındaki işlevdir, bu nedenle etiketler, JavaScript'ten çağırmak istediğiniz bir denetleyiciye koymak istediğiniz işlevin üstüne gider .
vapcguy

15

Parametre olarak bir değer göndermeniz gerekiyorsa.

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

8

Yapabileceğiniz başka bir şey, arkadaki kodda ayarlanan bir oturum değişkeni oluşturmak ve daha sonra bu değişkenin durumunu kontrol edip javascriptinizi çalıştırmaktır. İyi olan şey, betiğinizi DOM'de mi yoksa global olarak mı çalıştırmak istediğinizi anlamak yerine tam istediğiniz yerde çalıştırmanıza izin vermesidir.

Bunun gibi bir şey: Arkasında kod:

Session["newuser"] = "false" 

Javascript'te

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

7

Yapamazsın. Codebehind, istemcide JavaScript çalışırken sunucuda çalışıyor.

Ancak, <script type="text/javascript">someFunction();</script>çıktınıza ekleyebilir ve böylece tarayıcı işaretlemenizi ayrıştırırken JS işlevinin çağrılmasına neden olabilirsiniz.


65
"Yapamazsın. Ama işte böyle yapıyorsun."

3
Ben bir dönüş değeri almak veya bir geri arama belirtmek için gerçek bir yolu olmadığı için sunucu tarafı kodundan bir yöntemi çağırmak düşünün olmaz.
ThiefMaster

8
Ah, emin olabilirsin. Javascript veya AJAX herhangi bir şey geri postback arayabilirsiniz. Komik olduğunu düşündüm; Ben de aynı şeyi yapmaya meyilliyim - "Hayır, bu imkansız. Eğer yapabilseydi kimse bunu yapmak bile istemezdi." birkaç dakika sonra "İşte böyle yapacağız."

7

Değişmez kullanabilirsiniz:

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

1
Ama bu sadece belleğe bir komut dosyası eklemekle kalmıyor, aslında onu da çalıştırmıyor mu?
fandango68


5

Arkasında Kodda Deneyin ve% 100 çalışacaktır

Bu kod satırını size yazın Code Behind file

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

Ve bu web formu sayfası

<script type="text/javascript">
    function YourJavaScriptFunctionName() {
        alert("Test!")
    }
</script>

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

8
Biraz açıklama ekle
ketan

4

Çalışma Örneği: _

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

Arkasındaki Kod

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

    }
}

Olası tuzaklar: -

  1. Kod ve HTML aynı ad alanında olmayabilir
  2. CodeBehind="History.aspx.cs" yanlış sayfayı işaret ediyor
  3. JS işlevinde bazı hatalar var

3

Buradaki cevapların çoğunu kullandığımı fark ettim ScriptManager.RegisterStartupScriptve eğer bunu yapacaksanız, bunu yapmanın doğru yolu değil. Doğru yol kullanmaktır ScriptManager.RegisterScriptBlock([my list of args here]). Bunun nedeni, yalnızca sayfanız yüklendiğinde RegisterStartupScript kullanmanızdır (dolayısıyla RegisterStartupScript adı).

VB.NET'te:

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

C # ile:

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

Tabii ki, anahtar anahtar tanımlayıcı ile anahtarı değiştirmeniz gerektiğini ve muhtemelen tüm bunları bir alt / işlev / yönteme taşımanız ve anahtar ve someJavascriptObject (örneğin, javascript yönteminizin argümanınızın bir javascript nesnesi).

MSDN belgeleri:

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


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

fonksiyonunu kullanmak yeterlidir


2
Cevabınızı biraz daha açıklayabilir misiniz?
maxpaj

1
Bu "JavaFunction" parametresi nedir? İçine bir şey ekleyebilir miyiz? Bu argümanda ne olması gerekiyor?
Senura Dissanayake

1
@SenuraDissanayake Bu bir başlık-evet, herhangi bir şey olabilir ve gerçekten önemli değil.
vapcguy

2

Ben böyle yaptım.

Bir etiket ve düğme kontrolünü gösteren HTML işaretlemesi aşağıdaki gibidir.

<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 işlevi burada.

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

JavaScript işlevini tetiklemek için arkasındaki kod burada.

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

1

bu benim için çalışıyor

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

1

Mutanic ClientScriptve ScriptManagerbenzeri denemek içeren kod arkasında bir çözüm bulamadım ve Orlando Herrera bu soruda söyledi (ikisi de bir şekilde başarısız), ben başkalarına düğme tıklama kullanan bir ön uç çözüm sunacak eğer benimle aynı pozisyondalar. Bu benim için çalıştı:

HTML İşaretlemesi:

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

JavaScript:

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

Ben sadece OnClientClickistemci tarafı komut dosyası işlevleri, JavaScript olan ateş özelliğini kullanan bir ASP.NET düğmesini kullanıyorum . Burada dikkat edilmesi gereken en önemli şey, returnanahtar kelimenin fonksiyon çağrısında ve fonksiyonun kendisindeki kullanımlarıdır. Kullanılmayan returnancak yine de çalışmak için düğmeye tıklamayı sağlayan belgeleri okudum - bir şekilde benim için çalışmadı. return false;Fonksiyonunda deyimi bir geri gönderme gerçekleşmesi gerekir değil belirtir. Bu ifadeyi OnClientClickmülkte de kullanabilirsiniz :OnClientClick="myFunction() return false;"


0

Arkasında Code ScriptManager kullandım ve iyi çalıştı.

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

ASP Frontend'de UpdatePanel kullanıyorsanız. Ardından, UpdatePanel adını ve komut dosyası etiketleriyle tanımlanan 'işlev adını' girin.


0

Teşekkürler "Liko", sadece cevabına bir yorum ekle.

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

'Değişkene tek tırnak işareti ( ) eklendi , aksi takdirde hata mesajı verir:

string jsFunc = "myFunc('" + MyBackValue + "')";

-1

CodeBehind dosyası, web sunucusunda sunucu tarafı yürüten kodu içerdiğinden, CodeBehind bir Javascript işlevini çağıramazsınız. Javascript kodu, istemci tarafındaki web tarayıcısında yürütülür.


1
Bir javascript işlevini doğrudan myCoolJavascriptFunction (javascriptFunctionArgs) öğesinde olduğu gibi çağıramazsınız; ancak bir WebForms sayfasındaki koddan javascript işlevini çağırabilirsiniz.
cr1pto

cloudstrifebro ile anlaştı
Khurram Ishaque

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.