Yanıtlar:
Bunu deneyebilirsiniz:
Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);
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)
ScriptManager.RegisterStartupScript(this.Page, typeof(Page), "text", "openDep()", true);İşler. this.GetType()benim için bir hata veriyor.
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.
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 .
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);
ScriptManagerdeğil, yalnızca bu yanıtta Page.ClientScriptolduğu gibi kullanılır. asp:UpdatePanelKabul edilen cevap altındaki yorum ile ilgili olabilir .
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.
WebMethodolduğu gibi kullanın attribute.ScriptManagerAyarı EnablePageMethodsolarak ekle true.PageMethods.Bunun gibi:
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
}
ScriptManagerüzerinePage<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
function GetProductsByCategoryID(categoryID)
{
PageMethods.GetProducts(categoryID, OnGetProductsComplete);
}
Sunucudan bir JavaScript işlevi çağırmak için şunları kullanabilirsiniz RegisterStartupScript:
ClientScript.RegisterStartupScript(GetType(),"id","callMyJSFunction()",true);
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 .
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();
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.
Değişmez kullanabilirsiniz:
this.Controls.Add(new LiteralControl("<script type='text/javascript'>myFunction();</script>"));
IIRC Code Behind sunucu tarafında derlenir ve javascript istemci tarafında yorumlanır. Bu, ikisi arasında doğrudan bir bağlantı olmadığı anlamına gelir.
Öte yandan, istemci ve sunucu AJAX adlı şık bir araç üzerinden iletişim kurmaktır. http://en.wikipedia.org/wiki/Asynchronous_JavaScript_and_XML
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>
ScriptManager.RegisterStartupScript(this, this.Page.GetType(),"updatePanel1Script", "javascript:ConfirmExecute()",true/>
Ç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: -
CodeBehind="History.aspx.cs" yanlış sayfayı işaret ediyorBuradaki 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
ScriptManager.RegisterStartupScript(Page, GetType(), "JavaFunction", "AlertError();", true);
fonksiyonunu kullanmak yeterlidir
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>";
bu benim için çalışıyor
object Json_Object=maintainerService.Convert_To_JSON(Jobitem);
ScriptManager.RegisterClientScriptBlock(this,GetType(), "Javascript", "SelectedJobsMaintainer("+Json_Object+"); ",true);
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;"
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.
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 + "')";
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.
ScriptMethod özniteliğini kullanarak kod arkasındaki sayfalarda JavaScript aracılığıyla çağrılabilecek C # yöntemlerini gösterebilirsiniz .
JavaScript'i bir CodeBehind'den çağıramazsınız - bu kod yalnızca istemcide bulunur.