CodeBehind에서 JavaScript 함수 호출


답변:


206

당신은 이것을 시도 할 수 있습니다 :

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

41
ScriptManager.RegisterStartupScript (Page, typeof (Page), "somekey", script, true)로 이동합니다. 접근하다. 부분 포스트 백 중에도 작동합니다.
rdmptn

10
1. 정보Page.ClientScript.RegisterClientScriptBlock 가 필요 하면이 게시물을 참조하십시오 . 2. MyFunction ()이 작동하려면 MyFunction ()을 양식 태그 앞이나 그 내부에 정의해야하지만 </ form> 끝 태그 뒤에는 정의하지 않아야합니다 (그렇지 않으면 객체 예상 오류는 발생)
BornToCode

2
ScriptManager.RegisterStartupScript(this.Page, typeof(Page), "text", "openDep()", true);공장. this.GetType()나를 위해 오류를 던졌습니다.
SearchForKnowledge

2
코드로 싸서 asp:UpdatePanel버튼 이벤트로 작성된 경우에는 작동하지 않습니다 . 이로 인해 페이지가 다시 게시됩니다.
Senura Dissanayake 2016

52

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

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

alert()기능 이름으로 부품을 교체 하십시오.

JavaScript에서 C # 메서드를 호출하려면 ScriptManager또는 을 사용할 수 있습니다 jQuery. 나는 개인적으로 사용 jQuery합니다. WebMethod속성을 사용 하여 JavaScript에서 호출하려는 메소드를 장식해야 합니다. C # 메서드 호출 ( PageMethod) 에 대한 자세한 내용은 Dave Ward의 게시물을 jQuery참조하십시오 .


51

코드 뒤에서 JavaScript 함수 호출

1 단계 자바 스크립트 코드 추가

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

2 단계 1 추가 스크립트 관리자를 당신의 웹 양식에 1 개 추가 버튼을 너무

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

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

GridView 행을 클릭 할 때이 작업을 수행하려고하면 다른 답변이 ScriptManager아닌이 답변과 같이 사용할 때만 작동 Page.ClientScript합니다. asp:UpdatePanel허용 된 답변 아래의 의견 과 관련이있을 수 있습니다 .
Chris

16

직접 할 수는 없습니다. 표준 WebForms에서 JavaScript는 브라우저로, C #은 서버로 해석됩니다. 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);

MVC 3 파일 계층에서 1 단계를 어디에 배치합니까?
Rob

@Rob이 GetProducts()함수는 MVC 앱의 컨트롤러에있는 코드 숨김 함수이므로 태그는 JavaScript에서 호출하려는 컨트롤러에 추가하려는 함수의 맨 위에 있습니다. .
vapcguy

15

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

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

8

또 다른 방법은 코드 뒤에 설정된 세션 변수를 만든 다음 해당 변수의 상태를 확인한 다음 자바 스크립트를 실행하는 것입니다. 좋은 점은 DOM에서 또는 전 세계에서 스크립트를 실행 하려는지를 파악하는 대신 스크립트를 원하는 곳에서 바로 실행할 수 있다는 것입니다.

다음과 같은 것 : 코드 숨김 :

Session["newuser"] = "false" 

자바 스크립트에서

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

7

당신은 할 수 없습니다. JavaScript가 클라이언트에서 실행되는 동안 Codebehind가 서버에서 실행 중입니다.

그러나 <script type="text/javascript">someFunction();</script>출력에 추가 하여 브라우저가 마크 업을 구문 분석 할 때 JS 함수가 호출되도록 할 수 있습니다.


65
"당신은 할 수 없습니다. 그러나 당신이 그것을하는 방법은 여기 있습니다."

3
반환 값을 얻거나 콜백을 지정하는 실제 방법이 없기 때문에 서버 측 코드에서 메소드를 호출하는 것을 고려하지 않을 것입니다.
ThiefMaster

8
아, 물론 가능합니다. 자바 스크립트 나 AJAX에서 포스트 백을 호출하면됩니다. 나는 그것이 재미 있다고 생각했다. 나는 똑같은 일을하는 경향이 있습니다. "아니, 불가능합니다. 그들이 할 수 있다면 아무도 그렇게하기를 원하지 않을 것입니다." 몇 분 후 "그래서 우리가 어떻게 할 것인가."

7

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

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

1
그러나 이것은 단순히 스크립트를 메모리에 추가하는 것이 아니라 실제로 실행하지는 않습니까?
Fandango68


5

코드 숨김에서 이것을 시도하면 100 % 효과가 있습니다.

이 코드 줄을 코드 숨김 파일에 작성하십시오.

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

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

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

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

8
설명 추가
ketan

4

작업 예 : _

<%@ 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 함수에 오류가 있습니다

3

나는 여기에 사용되는 많은 답변을 알아 봤으며 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);

물론 키를 키 식별자로 바꿔야 하며이 모든 것을 하위 / 함수 / 방법으로 이동하고 키와 someJavascriptObject를 전달해야합니다 (자바 스크립트 메소드에 arg가 arg 자바 스크립트 객체).

MSDN 문서 :

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


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

당신의 기능을 사용하면 충분합니다


2
답을 좀 더 설명해 주시겠습니까?
maxpaj

1
이 "JavaFunction"매개 변수는 무엇입니까? 거기에 무엇이든 추가 할 수 있습니까? 그 주장에 무엇이 필요합니까?
Senura Dissanayake

1
@SenuraDissanayake 그것은 제목 예입니다, 그것은 무엇이든 될 수 있으며 실제로 중요하지 않습니다.
vapcguy

2

이것이 내가 한 방법입니다.

라벨과 버튼 컨트롤을 보여주는 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

이것은 나를 위해 작동

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

1

나는 시도 포함 코드 뒤에이었다 용액 찾을 수 없습니다 때문에 ClientScriptScriptManagermutanic 올랜도 헤레라는 (그들은 모두 어떻게 든 실패)이 질문에 말했듯이, 나는 다른 경우에 버튼 클릭을 이용하여 프런트 엔드 솔루션을 제공하겠습니다을 그들은 나와 같은 위치에 있습니다. 이것은 나를 위해 일했다 :

HTML 마크 업 :

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

자바 스크립트 :

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

ASP.NET 버튼을 사용하여 OnClientClick클라이언트 측 스크립팅 기능을 실행 하는 속성을 JavaScript로 사용합니다. 여기서 주목할 사항 return은 함수 호출과 함수 자체에서 키워드를 사용하는 것입니다. 사용하지 않는 return버튼을 읽었 지만 여전히 버튼 클릭이 작동합니다. 어떻게도 작동하지 않았습니다. return false;함수 의 명령문은 포스트 백이 발생하지 않도록 지정합니다. OnClientClick속성 에서 해당 명령문을 사용할 수도 있습니다 .OnClientClick="myFunction() return false;"


0

Code Behind에서 ScriptManager를 사용했으며 정상적으로 작동했습니다.

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

ASP 프론트 엔드에서 UpdatePanel을 사용하는 경우 그런 다음 UpdatePanel 이름과 스크립트 태그로 정의 된 'function name'을 입력하십시오.


0

"Liko"에게 감사의 말을 전하고 답변에 의견을 추가하십시오.

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

'변수에 작은 따옴표 ( )를 추가 했습니다. 그렇지 않으면 오류 메시지가 나타납니다.

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

-1

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


1
myCoolJavascriptFunction (javascriptFunctionArgs)에서와 같이 자바 스크립트 함수를 직접 호출 할 수 없습니다. WebForms 페이지의 코드에서 자바 스크립트 함수를 호출 할 수 있습니다.
cr1pto

cloudstrifebro에 동의
Khurram Ishaque

-1

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

CodeBehind에서 JavaScript를 호출 할 수 없습니다. 해당 코드는 클라이언트에만 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.