답변:
당신은 이것을 시도 할 수 있습니다 :
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()기능 이름으로 부품을 교체 하십시오.
JavaScript에서 C # 메서드를 호출하려면 ScriptManager또는 을 사용할 수 있습니다 jQuery. 나는 개인적으로 사용 jQuery합니다. WebMethod속성을 사용 하여 JavaScript에서 호출하려는 메소드를 장식해야 합니다. C # 메서드 호출 ( PageMethod) 에 대한 자세한 내용은 Dave Ward의 게시물을 jQuery참조하십시오 .
코드 뒤에서 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);
ScriptManager아닌이 답변과 같이 사용할 때만 작동 Page.ClientScript합니다. asp:UpdatePanel허용 된 답변 아래의 의견 과 관련이있을 수 있습니다 .
직접 할 수는 없습니다. 표준 WebForms에서 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가 클라이언트에서 실행되는 동안 Codebehind가 서버에서 실행 중입니다.
그러나 <script type="text/javascript">someFunction();</script>출력에 추가 하여 브라우저가 마크 업을 구문 분석 할 때 JS 함수가 호출되도록 할 수 있습니다.
리터럴을 사용할 수 있습니다.
this.Controls.Add(new LiteralControl("<script type='text/javascript'>myFunction();</script>"));
IIRC 코드 숨김은 서버 측에서 컴파일되고 Javascript는 클라이언트 측으로 해석됩니다. 이것은 둘 사이에 직접적인 연결이 없음을 의미합니다.
반면에 클라이언트와 서버가 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);
물론 키를 키 식별자로 바꿔야 하며이 모든 것을 하위 / 함수 / 방법으로 이동하고 키와 someJavascriptObject를 전달해야합니다 (자바 스크립트 메소드에 arg가 arg 자바 스크립트 객체).
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와 ScriptManagermutanic 올랜도 헤레라는 (그들은 모두 어떻게 든 실패)이 질문에 말했듯이, 나는 다른 경우에 버튼 클릭을 이용하여 프런트 엔드 솔루션을 제공하겠습니다을 그들은 나와 같은 위치에 있습니다. 이것은 나를 위해 일했다 :
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;"
CodeBehind 파일에는 웹 서버에서 서버 측을 실행하는 코드가 포함되어 있기 때문에 CodeBehind에서 Javascript 함수를 호출 할 수 없습니다. 자바 스크립트 코드는 클라이언트 측의 웹 브라우저에서 실행됩니다.
ScriptMethod 속성 을 사용하여 JavaScript를 통해 코드 숨김 페이지의 C # 메서드를 호출 할 수 있도록 노출 할 수 있습니다 .
CodeBehind에서 JavaScript를 호출 할 수 없습니다. 해당 코드는 클라이언트에만 있습니다.