[C#] JavaScript에서 ASP.NET 함수를 호출 하시겠습니까?

ASP.NET에서 웹 페이지를 작성 중입니다. JavaScript 코드가 있고 클릭 이벤트가있는 제출 버튼이 있습니다.

JavaScript의 클릭 이벤트로 ASP에서 만든 메소드를 호출 할 수 있습니까?



답변

글쎄, Ajax 또는 다른 방법을 사용하지 않고 정상적인 ASP.NET 포스트 백을 원한다면 다른 라이브러리를 사용하지 않고 다음과 같이하십시오.

그래도 조금 까다 롭습니다 … 🙂

나는. C # 및 .NET 2.0 이상을 사용한다고 가정 할 때 코드 파일에서 다음과 같은 인터페이스를 Page 클래스에 추가하십시오.

public partial class Default : System.Web.UI.Page, IPostBackEventHandler{}

ii. 이 기능을 코드 파일에 추가 ( Tab– 사용 Tab) 해야 합니다.

public void RaisePostBackEvent(string eventArgument) { }

iii. JavaScript의 onclick 이벤트에서 다음 코드를 작성하십시오.

var pageId = '<%=  Page.ClientID %>';
__doPostBack(pageId, argumentString);

JavaScript에서 전달한 ‘argumentString’으로 ‘eventArgument’를 사용하여 코드 파일에서 ‘RaisePostBackEvent’메소드를 호출합니다. 이제 원하는 다른 이벤트를 호출 할 수 있습니다.

추신 : 그것은 ‘밑줄-밑줄-포스트 포스트’입니다 … 그리고 그 순서에는 공백이 없어야합니다 … 어떻게 든 WMD는 밑줄과 문자를 쓸 수 없습니다!


답변

__doPostBack()방법은 잘 작동합니다.

또 다른 해결책 (매우 해킹)은 마크 업에 보이지 않는 ASP 버튼을 추가하고 JavaScript 방법으로 클릭하는 것입니다.

<div style="display: none;">
   <asp:Button runat="server" ... OnClick="ButtonClickHandlerMethod" />
</div>

JavaScript에서 ClientID를 사용하여 버튼에 대한 참조를 검색 한 후 .click () 메소드 를 호출하십시오 .

var button = document.getElementById(/* button client id */);

button.click();


답변

마이크로 소프트 AJAX 라이브러리는 이 작업을 수행합니다. AJAX를 사용하여 .NET 함수를 실행하기 위해 자체 aspx (기본적으로) 스크립트 파일을 호출하는 자체 솔루션을 만들 수도 있습니다.

Microsoft AJAX 라이브러리를 제안합니다. 일단 설치하고 참조하면 페이지로드 또는 초기화에 한 줄만 추가하면됩니다.

Ajax.Utility.RegisterTypeForAjax(GetType(YOURPAGECLASSNAME))

그런 다음 다음과 같은 작업을 수행 할 수 있습니다.

<Ajax.AjaxMethod()> _
Public Function Get5() AS Integer
    Return 5
End Function

그런 다음 페이지에서 다음과 같이 호출 할 수 있습니다.

PageClassName.Get5(javascriptCallbackFunction);

함수 호출의 마지막 매개 변수는 AJAX 요청이 리턴 될 때 실행될 javascript 콜백 함수 여야합니다.


답변

.NET Ajax PageMethods를 사용하여 비동기 적으로 수행 할 수 있습니다. 여기 또는 여기를 참조 하십시오 .


답변

블로그 게시물 Ajax (jQuery)를 사용하여 ASP.NET 페이지에서 SQL Server 데이터베이스 데이터를 가져오고 표시하는 방법 이 도움이 될 것이라고 생각합니다.

자바 스크립트 코드

<script src="http://code.jquery.com/jquery-3.3.1.js" />
<script language="javascript" type="text/javascript">

    function GetCompanies() {
        $("#UpdatePanel").html("<div style='text-align:center; background-color:yellow; border:1px solid red; padding:3px; width:200px'>Please Wait...</div>");
        $.ajax({
            type: "POST",
            url: "Default.aspx/GetCompanies",
            data: "{}",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: OnSuccess,
            error: OnError
        });
    }

    function OnSuccess(data) {
        var TableContent = "<table border='0'>" +
                                "<tr>" +
                                    "<td>Rank</td>" +
                                    "<td>Company Name</td>" +
                                    "<td>Revenue</td>" +
                                    "<td>Industry</td>" +
                                "</tr>";
        for (var i = 0; i < data.d.length; i++) {
            TableContent += "<tr>" +
                                    "<td>"+ data.d[i].Rank +"</td>" +
                                    "<td>"+data.d[i].CompanyName+"</td>" +
                                    "<td>"+data.d[i].Revenue+"</td>" +
                                    "<td>"+data.d[i].Industry+"</td>" +
                                "</tr>";
        }
        TableContent += "</table>";

        $("#UpdatePanel").html(TableContent);
    }

    function OnError(data) {

    }
</script>

ASP.NET 서버 측 기능

[WebMethod]
[ScriptMethod(ResponseFormat= ResponseFormat.Json)]
public static List<TopCompany> GetCompanies()
{
    System.Threading.Thread.Sleep(5000);
    List<TopCompany> allCompany = new List<TopCompany>();
    using (MyDatabaseEntities dc = new MyDatabaseEntities())
    {
        allCompany = dc.TopCompanies.ToList();
    }
    return allCompany;
}


답변

정적이고 강력한 형식의 프로그래밍은 항상 매우 자연스러운 느낌을 주었으므로 처음에는 응용 프로그램을위한 웹 기반 프런트 엔드를 구축해야 할 때 JavaScript (HTML 및 CSS는 말할 것도없이) 학습에 저항했습니다. 순수한 C #을 코딩 할 수있는 한 OnLoad 이벤트를 수행하고 조치를 취하기 위해 페이지로 리디렉션하는 것과 같이이 문제를 해결하기 위해 모든 작업을 수행합니다.

그러나 웹 사이트를 사용하려면 열린 마음을 가지고 더 웹 지향적 인 생각을 시작해야합니다 (즉, 서버에서 클라이언트 측 작업을 수행하려고 시도하지 마십시오) . 나는 ASP.NET 웹 양식을 좋아하고 여전히 MVC 뿐만 아니라 그것을 사용 하지만 클라이언트와 서버의 분리를 숨기려고하면 초보자를 혼란스럽게하고 실제로는 때로는 더 어려워 질 수 있다고 말할 것입니다 .

내 조언은 몇 가지 기본 JavaScript (이벤트 등록, DOM 객체 검색, CSS 조작 등)를 배우는 것이므로 웹 프로그래밍이 훨씬 더 즐겁습니다 (쉽게 언급 할 수는 없음). 많은 사람들이 다른 Ajax 라이브러리를 언급했지만 실제 Ajax 예제는 보지 않았으므로 여기에갑니다. (Ajax에 익숙하지 않다면 전체 페이지를 다시로드하거나 전체 포스트 백을 수행하지 않고 컨텐츠를 새로 고치거나 시나리오에서 서버 측 작업을 수행하기 위해 비동기 HTTP 요청을하는 것입니다.

고객 입장에서:

<script type="text/javascript">
var xmlhttp = new XMLHttpRequest(); // Create object that will make the request
xmlhttp.open("GET", "http://example.org/api/service", "true"); // configure object (method, URL, async)
xmlhttp.send(); // Send request

xmlhttp.onstatereadychange = function() { // Register a function to run when the state changes, if the request has finished and the stats code is 200 (OK). Write result to <p>
    if (xmlhttp.readyState == 4 && xmlhttp.statsCode == 200) {
          document.getElementById("resultText").innerHTML = xmlhttp.responseText;
    }
};
</script>

그게 다야. 이름이 잘못 될 수 있지만 결과는 일반 텍스트 또는 JSON 일 수 있지만 XML로 제한되지는 않습니다. jQuery 는 Ajax 호출을위한보다 간단한 인터페이스를 제공합니다 (다른 JavaScript 작업을 단순화 함).

요청은 HTTP-POST 또는 HTTP-GET 일 수 있으며 웹 페이지 일 필요는 없지만 RESTful 과 같은 HTTP 요청을 수신하는 모든 서비스에 게시 할 수 있습니다. API . ASP.NET MVC 4 웹 API는 서버 측 웹 서비스를 설정하여 요청을 쉽게 처리 할 수 ​​있도록합니다. 그러나 많은 사람들은 웹 양식 프로젝트에 API 컨트롤러를 추가하고이를 사용하여 Ajax 호출을 처리 할 수 ​​있다는 것을 모릅니다.

서버 측:

public class DataController : ApiController
{
    public HttpResponseMessage<string[]> Get()
    {
        HttpResponseMessage<string[]> response = new HttpResponseMessage<string[]>(
            Repository.Get(true),
            new MediaTypeHeaderValue("application/json")
        );

        return response;
    }
}

Global.asax

그런 다음 Global.asax 파일에 HTTP 경로를 등록하면 ASP.NET은 요청을 지시하는 방법을 알 수 있습니다.

void Application_Start(object sender, EventArgs e)
{
    RouteTable.Routes.MapHttpRoute("Service", "api/{controller}/{id}");
}

AJAX 및 컨트롤러를 사용하면 서버 측 작업을 수행하기 위해 언제든지 비동기 적으로 서버에 다시 게시 할 수 있습니다. 이 1-2 펀치는 JavaScript의 유연성과 C # / ASP.NET의 성능을 모두 제공하여 사이트를 방문하는 사람들에게 전반적인 경험을 향상시킵니다. 아무것도 희생하지 않으면 서 두 세계의 장점을 모두 누릴 수 있습니다.

참고 문헌


답변

Microsoft AJAX 라이브러리가이를 수행합니다. AJAX를 사용하여 .NET 함수를 실행하기 위해 자체 aspx (기본적으로) 스크립트 파일을 호출하는 자체 솔루션을 만들 수도 있습니다.

이 라이브러리는 Michael Schwarz 라는 MVP로 작성된 AjaxPro라는 라이브러리 입니다. 이 라이브러리는 Microsoft에서 작성하지 않았습니다.

나는 AjaxPro를 광범위하게 사용했으며 서버에 대한 간단한 콜백을 권장하는 매우 훌륭한 라이브러리입니다. Ajax의 Microsoft 버전에서는 문제없이 작동합니다. 그러나 Microsoft가 Ajax를 얼마나 쉽게 만들 었는지 실제로 필요한 경우에만 사용합니다. 업데이트 패널에 놓아 Microsoft에서 얻는 복잡한 기능을 수행하려면 많은 JavaScript가 필요합니다.