回答:
あなたはこれを試すことができます:
Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);
Page.ClientScript.RegisterClientScriptBlockは、代わりに この投稿を参照してください。2. MyFunction()が機能するためには、MyFunction()をフォームタグの前または内部で定義する必要がありますが、</ form>終了タグの後には定義しない必要があります(そうでない場合、オブジェクトの予期されるエラーが発生します)発生する)
ScriptManager.RegisterStartupScript(this.Page, typeof(Page), "text", "openDep()", true);動作します。this.GetType()エラーが発生します。
asp:UpdatePanelされ、ボタンイベントに書き込まれた場合は機能しません。これにより、ページがポストバックされます。
C#からJavaScript:次のように、スクリプトブロックを登録してページで実行できます。
ClientScript.RegisterStartupScript(GetType(),"hwa","alert('Hello World');",true);
alert()partを関数名に置き換えます。
JavaScriptからC#メソッドを呼び出すには、ScriptManagerまたはを使用できますjQuery。個人的に使用していますjQuery。JavaScriptから呼び出すメソッドをWebMethod属性で装飾する必要があります。C#メソッド(と呼ばれるPageMethod)の呼び出しに関する詳細についてjQueryは、Dave Wardの投稿を参照してください。
コードビハインドからJavaScript関数を呼び出す
ステップ1 JavaScriptコードを追加する
<script type="text/javascript" language="javascript">
function Func() {
alert("hello!")
}
</script>
手順2 webForm に1つのスクリプトマネージャーを追加し、1つのボタンも追加する
手順3このコードをボタンクリックイベントに追加します
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Func()", true);
ScriptManagerと、この回答のように使用した場合にのみ機能Page.ClientScriptし、他の回答では機能しません。asp:UpdatePanel受け入れられた回答の下のコメントに関連している可能性があります。
これを直接行うことはできません。標準のWebフォームでは、JavaScriptはブラウザによって解釈され、C#はサーバーによって解釈されます。JavaScriptを使用してサーバーからメソッドを呼び出すためにできることは次のとおりです。
WebMethodようattributeに使用します。ScriptManager設定をEnablePageMethodsとして追加しますtrue。PageMethods。このような:
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にはPage<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
function GetProductsByCategoryID(categoryID)
{
PageMethods.GetProducts(categoryID, OnGetProductsComplete);
}
サーバーからJavaScript関数を呼び出すには、次を使用できますRegisterStartupScript。
ClientScript.RegisterStartupScript(GetType(),"id","callMyJSFunction()",true);
GetProducts()関数は、MVCアプリのコントローラーに存在する分離コード関数にすぎないため、JavaScriptから呼び出す予定のコントローラーに配置する関数の上にタグが配置されます。 。
できません。JavaScriptがクライアントで実行されている間、分離コードはサーバーで実行されます。
ただし、<script type="text/javascript">someFunction();</script>出力に追加して、ブラウザーがマークアップを解析しているときにJS関数が呼び出されるようにすることができます。
リテラルを使用できます:
this.Controls.Add(new LiteralControl("<script type='text/javascript'>myFunction();</script>"));
IIRCコードビハインドはサーバーサイドでコンパイルされ、JavaScriptはクライアントサイドで解釈されます。これは、2つの間に直接リンクがないことを意味します。
一方、AJAXと呼ばれる気の利いたツールを介してクライアントとサーバーを通信させることができます。http://en.wikipedia.org/wiki/Asynchronous_JavaScript_and_XML
コードビハインドでこれを試してください、それは100%機能します
このコード行をコードビハインドファイルに記述します
string script = "window.onload = function() { YourJavaScriptFunctionName(); };";
ClientScript.RegisterStartupScript(this.GetType(), "YourJavaScriptFunctionName", script, true);
そして、これはウェブフォームページです
<script type="text/javascript">
function YourJavaScriptFunctionName() {
alert("Test!")
}
</script>
作業例:_
<%@ 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>
コードビハインド
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);
}
}
}
考えられる落とし穴:-
CodeBehind="History.aspx.cs" 間違ったページを指しています私はここで多くの答えが使用されていることに気づきました、ScriptManager.RegisterStartupScriptそしてあなたがそうするつもりなら、それはそれを行う正しい方法ではありません。正しい方法はを使用することScriptManager.RegisterScriptBlock([my list of args here])です。その理由は、ページが読み込まれるときにRegisterStartupScriptのみを使用する必要があるためです(そのため、RegisterStartupScriptという名前です)。
VB.NETの場合:
ScriptManager.RegisterClientScriptBlock(Page, GetType(String), "myScriptName" + key, $"myFunctionName({someJavascriptObject})", True)
C#の場合:
ScriptManager.RegisterClientScriptBlock(Page, typeof(string), "myScriptName" + key, $"myFunctionName({someJavascriptObject})", true);
もちろん、keyをキー識別子で置き換える必要があることは言うまでもありません。おそらく、これらすべてをsub / function / methodに移動し、keyとsomeJavascriptObjectを渡す必要があります(javascriptメソッドで引数がJavaScriptオブジェクト)。
MSDNドキュメント:
https://msdn.microsoft.com/en-us/library/bb338357(v=vs.110).aspx
ScriptManager.RegisterStartupScript(Page, GetType(), "JavaFunction", "AlertError();", true);
関数を使用するだけで十分です
これが私がやった方法です。
ラベルとボタンコントロールを示すHTMLマークアップは次のとおりです。
<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関数はこちらです。
<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関数をトリガーするコードビハインドはこちらです。
lblJavaScript.Text = "<script type='text/javascript'>showDialogue();</script>";
これは私のために働く
object Json_Object=maintainerService.Convert_To_JSON(Jobitem);
ScriptManager.RegisterClientScriptBlock(this,GetType(), "Javascript", "SelectedJobsMaintainer("+Json_Object+"); ",true);
コードの背後にある解決策を見つけることができなかったのでClientScript、ScriptManager mutanicとオーランド・エレーラのように(彼らは両方とも何らかの形で失敗した)この質問で述べて、私があれば他の人に、ボタンのクリックを利用して、フロントエンドのソリューションを提供します彼らは私と同じ立場にいます。これは私のために働きました:
HTMLマークアップ:
<asp:button ID="myButton" runat="server" Text="Submit" OnClientClick="return myFunction();"></asp:button>
JavaScript:
function myFunction() {
// Your JavaScript code
return false;
}
私はOnClientClick、JavaScriptであるクライアント側のスクリプト関数を起動するプロパティを利用するASP.NETボタンを単に使用しています。ここで注意すべき重要な点returnは、関数呼び出しおよび関数自体でのキーワードの使用です。使用していないドキュメントを読みましたreturnが、ボタンをクリックしても機能します-どういうわけか機能しませんでした。return false;関数内のステートメントは、ポストバックが発生してはならないことを指定しています。OnClientClickプロパティでそのステートメントを使用することもできます。OnClientClick="myFunction() return false;"
CodeBehindファイルにはWebサーバーでサーバー側を実行するコードが含まれているため、CodeBehindからJavaScript関数を呼び出すことはできません。JavaScriptコードは、クライアント側のWebブラウザーで実行されます。
分離コードページでC#メソッドを公開し、ScriptMethod属性を使用してJavaScriptから呼び出し可能にすることができます。
CodeBehindからJavaScriptを呼び出すことはできません。そのコードはクライアントにのみ存在します。