__doPostBack () 사용 방법


161

ASP.NET에서을 사용하여 비동기 포스트 백을 만들려고하는데 어떻게 해야할지 모르겠습니다 __doPostBack(). 바닐라 JavaScript를 사용하고 싶습니다.

버튼 클릭과 같은 간단한 것이 __doPostBack()이벤트를 발생 시킬 수 있습니다 . 메커니즘이 어떻게 작동하는지 배우려고합니다.



9
우선 __doPostBack은 UpdatePanel 내부의 제어에 의해 트리거되지 않는 한 비동기 작업을 유발하지 않습니다.
Ladislav Mrnka

왜이 태그입니다 C #을 하고 자바 스크립트 . 자바 스크립트 부분 은 이해 하지만 C # 부분 은 이해 하지 못합니다 .
Solomon Ucko 2016 년

1
@Solomon Ucko는 - __doPostBack ()가 가장 가능성이 C #으로 될 것입니다 자사의 서버 측 구현에 POST로 페이지를 유발하기 때문에 (VB.NET 될 수 있음)
sh1rts

1
일반적으로 작동하지만 수동 삽입 __doPostBack은 실제로 지원되지 않습니다. 페이지에 포스트 백을 유발하는 것이 없으면 asp.net이 __doPostBack함수 정의를 생략 할 수 있습니다. 지원되는 접근 방식은을 호출 하는 것 입니다.이 ClientScriptManager.GetPostBackEventReference양식은 문자열을 양식으로 리턴하고 정의 __doPostBack(...)되어 있는지 확인합니다 __doPostBack.
Brian

답변:


156

예를 들어 btnSave라는 버튼을 사용하여 웹 양식에서이를 시도 할 수 있습니다.

<input type="button" id="btnSave" onclick="javascript:SaveWithParameter('Hello Michael')" value="click me"/>

<script type="text/javascript">
function SaveWithParameter(parameter)
{
  __doPostBack('btnSave', parameter)
}
</script>

그리고 코드 뒤에는 값을 읽고 그에 따라 다음과 같은 것을 추가하십시오.

public void Page_Load(object sender, EventArgs e)
{
  string parameter = Request["__EVENTARGUMENT"]; // parameter
  // Request["__EVENTTARGET"]; // btnSave
}

시도해보고 그것이 당신에게 효과가 있는지 알려주십시오.


1
간단한 질문 인 __EVENTARGUMENT는 매개 변수 또는 btnSave입니까?
harsimranb

3
매개 변수입니다. __EVENTTARGET이 버튼을 제공합니다.
Mr. Mr.

__doPostBack을 수행하는 두 개 이상의 단추가 있으면 page_load ()의 서버 측에서 어떻게 구별합니까?
khalid khan

1
둘 이상의 매개 변수가있는 경우는 어떻게됩니까?
Wilson

1
@Wilson은 또 다른 주장으로 C #의 객체에 매핑 할 수있는 Json 데이터 일 수 있다고 생각했습니다. 그런 다음 Json.net을 사용하여 객체 등을 직렬화 해제 / 직렬화 할 수 있습니다.
Mr. Mr. Mr.

25

이것은 또한 FancyBox 및 / 또는 jQuery Dialog 내에서 서버 측 컨트롤을 포스트 백 할 수있는 좋은 방법 입니다. 예를 들어 FancyBox-div에서 :

   <asp:Button OnClientClick="testMe('param1');" ClientIDMode="Static"  ID="MyButton"  runat="server" Text="Ok" >
</asp:Button>

자바 스크립트 :

function testMe(params) {
    var btnID= '<%=MyButton.ClientID %>';          
    __doPostBack(btnID, params);
}

서버 측 Page_Load :

 string parameter = Request["__EVENTARGUMENT"];
 if (parameter == "param1")
     MyButton_Click(sender, e);

4
ClientID가 아닌 UniqueID를 사용해야합니다.
Garr Godfrey

또는의 ClientIDMode="Static"속성을 설정하여 MyButtonASP가 버튼의 ID를 조작하지 않도록하십시오.
David R Tribble

14

여기의 간단한 튜토리얼 방법에 대한 __doPostBack()작품.

솔직히 말해서, 나는 그것을 많이 사용하지 않습니다. 적어도 직접적으로. 많은 서버 컨트롤 (예를 들어, Button, LinkButton, ImageButton,의 부품 GridView등)를 사용하여 __doPostBack자신의 포스트 백 메커니즘.


6 년 후 빨리 감기; 여전히 이것을 사용하면 충격을받을 것입니다. 웹 개발에 대한 접근 방식은 일반적으로 이와 같은 것들이 사용되는 사고 방식에서 멀어졌습니다.
Phil

@Phil -이 구현 된 버그를 보면서 하하, 어제이 스레드를 읽고 있었다 :) 그것은 아주이 하루에 고대 나이 보인다
테리 Delahunt

12
빨리 감기 6 년 ... 그리고 ASP.NET Web Forms는 여전히이 작업을 수행합니다. 따라서 받아 들여진 대답에 대한 압도적 인 찬성.
kbrimington

@kbrimington : ASP.NET이 "여전히 이것을하지 않을 것"이라고 말하지 않았습니다. 나는 그것이 많이 변할 것으로 기대하지 않습니다. 필자가 의미하는 바는 새로운 개발에 ASP.NET WebForm을 사용하는 사람이 적고 다른 사람들이 마이그레이션하는 것을 의미합니다.
Phil

10

에 대한이 게시물에 무언가를 추가하고 싶습니다 asp:button. clientId를 시도했지만 작동하지 않는 것 같습니다.

__doPostBack('<%= btn.ClientID%>', '');

그러나 UniqueId를 얻는 것은 다음과 같이 서버에 다시 게시되는 것처럼 보입니다.

__doPostBack('<%= btn.UniqueID%>', '');

나중에 다른 사람에게 도움이 될 수 있으므로 게시 할 수 있습니다.


1
예 . ClientID를 사용했기 때문에에 문제가 있었습니다 ClientIDMode = Static. 사용 UniqueID했다.
Phiter

나는 이것을 작동 시키려고 노력했지만 ClientID 나 UniqueId가 나를 위해 작동하지 않습니다.
atamata

세상에! 이 문제를 해결하려고 몇 일이 걸렸습니다. UniqueID가 문제를 해결했습니다. 고마워 친구!
Faiz Infy

2

오래된 질문이지만 무언가를 추가하고 싶습니다 : 호출 doPostBack()할 때 작업에 서버 핸들러 메소드를 사용할 수 있습니다.

예를 들어 :

__doPostBack('<%= btn.UniqueID%>', 'my args');

서버에서 실행됩니다.

protected void btn_Click(object sender, EventArgs e)

인수를 얻는 더 좋은 방법을 찾지 못했지만 여전히을 사용하고 Request["__EVENTARGUMENT"]있습니다.


0

다른 사람들이 말했듯이 __doPostback () 메서드에 컨트롤의 UniqueID를 제공해야합니다.

__doPostBack('<%= btn.UniqueID %>', '');

서버에서 제출 된 양식 값은 페이지에서 필드 의 이름 속성으로 식별됩니다 .

UniqueID가 작동 하는 이유 는 서버 컨트롤이 HTML로 렌더링 될 때 UniqueID이름 이 실제로 동일하기 때문입니다.

UniqueID가 무엇인지 설명하는 기사는 다음과 같습니다.

UniqueID 속성은 입력 필드 (확인란, 드롭 다운 목록 및 숨겨진 필드)의 HTML "name"속성 값을 제공하는 데에도 사용됩니다. UniqueID는 또한 포스트 백에서 중요한 역할을합니다. 포스트 백을 지원하는 서버 컨트롤의 UniqueID 속성은 __EVENTTARGET 숨겨진 필드에 대한 데이터를 제공합니다. 그런 다음 ASP.NET 런타임은 __EVENTTARGET 필드를 사용하여 포스트 백을 트리거 한 컨트롤을 찾은 다음 RaisePostBackEvent 메서드를 호출합니다.

src : https://www.telerik.com/blogs/the-difference-between-id-clientid-and-uniqueid


0

이것이 내가하는 방법입니다

    public void B_ODOC_OnClick(Object sender, EventArgs e)
    {
        string script="<script>__doPostBack(\'fileView$ctl01$OTHDOC\',\'{\"EventArgument\":\"OpenModal\",\"EncryptedData\":null}\');</script>";
        Page.ClientScript.RegisterStartupScript(this.GetType(),"JsOtherDocuments",script);               
    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.