web-dev-qa-db-ja.com

分離コードからのJavaScript関数の呼び出し

誰かがコードビハインドとその逆からJavaScript関数を呼び出す良い例を提供できますか?

136
ssmsnet

あなたはこれを試すことができます:

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

C#からJavaScript:次のようにページ上で実行するスクリプトブロックを登録できます。

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

alert()の部分をあなたの関数名に置き換えてください。

JavaScriptからC#メソッドを呼び出すには、ScriptManagerまたはjQueryを使用できます。私は個人的にjQueryを使用しています。 JavaScriptから呼び出したいメソッドをWebMethod属性で装飾する必要があります。 PageMethodからC#メソッド(jQueryと呼ばれる)を呼び出す方法についての詳細は、 Dave Wardの の投稿を参照してください。

50
TheVillageIdiot

分離コードからJavaScript関数を呼び出す

ステップ1 Javascriptコードを追加してください。

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

ステップ2 1スクリプトマネージャをWebフォームに追加し、1ボタンを追加

ステップ3ボタンクリックイベントにこのコードを追加します。

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

これは直接できません。標準のWebフォームでは、JavaScriptはブラウザによって、C#はサーバによって解釈されます。 JavaScriptを使ってサーバーからメソッドを呼び出すためにできることは何ですか。

  • ターゲットメソッドでは WebMethodattribute として使用します。
  • ScriptManager 設定 EnablePageMethodstrueとして追加します。
  • オブジェクトPageMethodsを介してメソッドを呼び出すためのJavaScriptコードを追加します。

このような:

ステップ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 
    }

ステップ2: ScriptManagerPage に追加する

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

ステップ3:JavaScriptを使ってメソッドを呼び出す

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

このリンクを見てください。

サーバーからJavaScript関数を呼び出すには、 RegisterStartupScript を使用できます。

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

パラメータとして値を送信する必要がある場合.

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

それはいけません。 JavaScriptがクライアントで実行されている間、コードビハインドはサーバーで実行されています。

ただし、出力に<script type="text/javascript">someFunction();</script>を追加することで、ブラウザがマークアップを解析しているときにJS関数が呼び出されるようにできます。

8
ThiefMaster

もう1つできることは、分離コードで設定されるセッション変数を作成し、その変数の状態を確認してからJavaScriptを実行することです。良いことに、DOMで実行するのかグローバルに実行するのかを判断しなくても、必要な場所でスクリプトを実行できます。

このようなもの:コードビハインド:

Session["newuser"] = "false" 

JavaScriptで

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

あなたはリテラルを使うことができます:

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

IIRC Code Behindはサーバー側でコンパイルされ、JavaScriptはクライアント側で解釈されます。これは2つの間に直接のリンクがないことを意味します。

その一方で、あなたができることはクライアントとサーバーがAJAXと呼ばれる気の利いたツールを通して通信することです。 http://ja.wikipedia.org/wiki/Asynchronous_JavaScript_and_XML

5

作業例:_

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

    }
}

考えられる落とし穴: -

  1. コードとHTMLが同じ名前空間にない可能性があります
  2. CodeBehind="History.aspx.cs"は間違ったページを指しています
  3. JS関数にエラーがあります
4
Hitesh Sahu
ScriptManager.RegisterStartupScript(this, this.Page.GetType(),"updatePanel1Script", "javascript:ConfirmExecute()",true/>
4
Apps Tawale

私はここでの回答の多くが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をkey識別子に置き換える必要があり、おそらくこれらすべてをsub/function/methodに移動してkeyとsomeJavascriptObjectを渡す必要があることは言うまでもありません。 javascriptオブジェクト).

MSDNのドキュメント:

https://msdn.Microsoft.com/ja-jp/library/bb338357(v = vs.110).aspx

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

あなたの関数を使って十分です

2
sadist king

これが私のやり方です。

ラベルとボタンコントロールを表示する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>";
1
evaaggy

これは私のために働く

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

ScriptMethod属性 を使用して、JavaScriptを介して呼び出すことができるようにコードビハインドページのC#メソッドを公開できます。

CodeBehindからJavaScriptを呼び出すことはできません - そのコードはクライアント上にのみ存在します。

1
Josh Kodroff

私はコードビハインドでScriptManagerを使用しました、そしてそれはうまくいきました。

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

ASP FrontendでUpdatePanelを使用している場合次に、UpdatePanelの名前とスクリプトタグで定義された「関数名」を入力します。

0
Ravi Agrawal

これをコードビハインドで試してみると、100%うまくいくでしょう

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

CodeBehindファイルにはWebサーバー上でサーバー側で実行されるコードが含まれているため、CodeBehindからJavascript関数を呼び出すことはできません。 JavaScriptコードはクライアント側のWebブラウザで実行されます。

0
Charlie Kilian

MutanicやOrlando HerreraのようにClientScriptScriptManagerを試すことを含む、コードビハインドの解決策が見つからなかったため(どちらも失敗しました)、ボタンクリックを使用してフロントエンドのソリューションを提供します。他の人たちが私と同じ立場にいるならば。これは私のために働いた:

HTMLマークアップ:

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

JavaScript:

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

私は単純にASP.NETボタンを使用しています。これはOnClientClickプロパティを利用しています。これはクライアントサイドのスクリプト機能、つまりJavaScriptです。ここで注意すべき重要な点は、関数呼び出しと関数自体でのreturnキーワードの使用です。私はreturnを使用していないが、それでもボタンをクリックしても動作するようなドキュメントを読んだことがあります。関数内のreturn false;ステートメントは、ポストバックが発生しないように指定します。そのステートメントをOnClientClickプロパティで使用することもできます。OnClientClick="myFunction() return false;"

0
Max Voisard