programing

코드 뒤에서 JavaScript 함수 호출

golfzon 2023. 5. 9. 23:28
반응형

코드 뒤에서 JavaScript 함수 호출

누군가 코드비하인드에서 자바스크립트 함수를 호출하는 좋은 예를 제공할 수 있습니까?

다음을 시도할 수 있습니다.

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

코드 뒤에서 JavaScript 함수 호출

1단계 Javascript 코드 추가

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

2단계 웹 양식에 스크립트 관리자 1개 추가 및 단추 1개 추가

3단계 버튼 클릭 이벤트에 이 코드 추가

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

C# to JavaScript: 다음과 같이 페이지에서 실행할 스크립트 블록을 등록할 수 있습니다.

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

체교다를 alert()사용자의 함수 이름으로 구성됩니다.

는 JavaScript C#을 사용할 수 .ScriptManager또는jQuery개인적으로 사용합니다.jQuery 메소드를 자바스크립트로 가 있습니다.WebMethod호출 은 C# 호출 방법(C# 호출)을 참조하십시오.PageMethod에서▁from서jQuery데이브 워드의 게시물을 참조할 수 있습니다.

매개 변수로 값을 보내야 하는 경우.

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

이 작업은 직접 수행할 수 없습니다.표준 WebForms에서 JavaScript는 브라우저에 의해 해석되고 C#은 서버에 의해 해석됩니다.자바스크립트를 사용하여 서버에서 메소드를 호출할 수 있는 것은 다음과 같습니다.

  • 대상 메소드와 같이 사용합니다.
  • 다음으로 설정 추가true.
  • 를 합니다.PageMethods.

다음과 같이:

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단계: 에서 a 추가

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

3단계: JavaScript를 사용한 메서드 호출

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

이 링크를 보세요.

서버에서 JavaScript 함수를 호출하려면 다음을 사용합니다.

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

또 다른 방법은 뒤에 있는 코드에 설정된 세션 변수를 만든 다음 해당 변수의 상태를 확인하고 Javascript를 실행하는 것입니다.좋은 점은 이렇게 하면 DOM에서 스크립트를 실행할지 글로벌하게 실행할지 결정하지 않고 원하는 위치에서 스크립트를 실행할 수 있다는 것입니다.

다음과 같은 것: 코드 뒤에:

Session["newuser"] = "false" 

자바스크립트로

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

안 돼요.JavaScript가 클라이언트에서 실행되는 동안 서버에서 실행되는 코드입니다.

그러나 추가할 수 있습니다.<script type="text/javascript">someFunction();</script>사용자의 출력에 표시되므로 브라우저가 사용자의 마크업을 구문 분석할 때 JS 함수가 호출됩니다.

리터럴을 사용할 수 있습니다.

this.Controls.Add(new LiteralControl("<script type='text/javascript'>myFunction();</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);
        }

    }
}

가능한 함정:-

  1. 코드와 HTML이 동일한 네임스페이스에 있지 않을 수 있음
  2. CodeBehind="History.aspx.cs"잘못된 페이지를 가리키고 있습니다.
  3. JS 함수에 약간의 오류가 있습니다.

IIRC Code Behind는 서버 측에서 컴파일되고 javascript는 클라이언트 측에서 해석됩니다.이것은 그 둘 사이에 직접적인 연결고리가 없다는 것을 의미합니다.

반면에 당신이 할 수 있는 것은 AJAX라는 훌륭한 도구를 통해 클라이언트와 서버가 통신하도록 하는 것입니다.http://en.wikipedia.org/wiki/Asynchronous_JavaScript_and_XML

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

여기에 있는 많은 대답들이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);

물론 키 식별자로 키를 대체해야 하며 이 모든 것을 서브/함수/메소드로 이동하여 키와 일부 자바스크립트 Object(javascript 메서드에서 arg가 자바스크립트 객체임을 요구하는 경우)를 전달해야 한다는 것은 말할 필요도 없습니다.

MSDN 문서:

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

이게 제가 한 방법입니다.

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>";
ScriptManager.RegisterStartupScript(Page, GetType(), "JavaFunction", "AlertError();", true);

당신의 기능을 사용하는 것으로 충분합니다.

코드비하에서 이것을 시도하면 100% 작동할 것입니다.

이 코드 행을 코드 뒤에 파일에 기록합니다.

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

그리고 이것은 웹 양식 페이지입니다.

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

이것은 나에게 효과가 있습니다.

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

코드 뒤에 있는 솔루션을 찾을 수 없었기 때문에, 여기에는 사용해 보는 것도 포함됩니다.ClientScript그리고.ScriptManager무타닉과 올랜도 에레라가 이 질문에서 말한 것처럼(둘 다 어떻게든 실패했습니다), 저와 같은 위치에 있는 다른 사람들에게 버튼 클릭을 활용하는 프런트 엔드 솔루션을 제공하겠습니다.이것은 저에게 효과가 있었습니다.

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

코드비하인드에서 ScriptManager를 사용했는데 잘 작동했습니다.

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

ASP Frontend에서 UpdatePanel을 사용하는 경우.그런 다음 UpdatePanel 이름과 스크립트 태그로 정의된 '함수 이름'을 입력합니다.

"리코"에게 감사합니다. 그의 대답에 댓글을 달아주세요.

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

따옴표가 되었습니다.'variable, variable에 메시지:)를 합니다.

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

CodeBehind 파일에는 웹 서버에서 서버 측을 실행하는 코드가 포함되어 있기 때문에 CodeBehind에서 Javascript 함수를 호출할 수 없습니다.Javascript 코드는 클라이언트 측의 웹 브라우저에서 실행됩니다.

ScriptMethod 특성을 사용하여 JavaScript를 통해 호출할 수 있도록 페이지 뒤의 코드에 C# 메서드를 노출할 수 있습니다.

코드비하인드에서 JavaScript를 호출할 수 없습니다. 코드는 클라이언트에만 존재합니다.

언급URL : https://stackoverflow.com/questions/5731224/calling-javascript-function-from-codebehind

반응형