2011-09-01 3 views
26

나는이 두 개의 버튼 :어떤 컨트롤에서 포스트 백이 발생 했습니까?

나는이 두 가지 중 하나가 포스트 백을 발생하는 pageLoad에 확인하는 방법을
<asp:Button ID="Button1" runat="server" Text="Button" /> 
<asp:Button ID="Button2" runat="server" Text="Button" /> 

? 이 포스트 백이 발생할 수있는 컨트롤이 두 개 밖에 없다는 것을 알고있는 간단한 해결책이 있습니까?

/// <summary> 
/// Retrieves the control that caused the postback. 
/// </summary> 
/// <param name="page"></param> 
/// <returns></returns> 
private Control GetControlThatCausedPostBack(Page page) 
{ 
    //initialize a control and set it to null 
    Control ctrl = null; 

    //get the event target name and find the control 
    string ctrlName = page.Request.Params.Get("__EVENTTARGET"); 
    if (!String.IsNullOrEmpty(ctrlName)) 
     ctrl = page.FindControl(ctrlName); 

    //return the control to the calling method 
    return ctrl; 
} 
+3

http://aspnetnova.blogspot.com/2009/04/find-post-back-co ntrol-in-aspnet-page-c.html –

답변

43

당신은 포스트 백을 발생 제어를 얻기 위해이 방법을 사용할 수 있습니다 . 다른 사람에게도 도움이되기를 바랍니다.

<asp:Button ID="Button1" runat="server" Text="Button" 
    OnClientClick = "SetSource(this.id)" /> 

    <asp:ImageButton ID="ImageButton1" runat="server" 
    OnClientClick = "SetSource(this.id)" /> 

      <script type = "text/javascript"> 
      function SetSource(SourceID) 
      { 
    var hidSourceID = 
    document.getElementById("<%=hidSourceID.ClientID%>"); 
    hidSourceID.value = SourceID; 
    } 
    </script> 

on code behind you can get the ID of the function using : 
if (IsPostBack) 
{ 
    string CtrlID = string.Empty; 
    if (Request.Form[hidSourceID.UniqueID] != null && 
     Request.Form[hidSourceID.UniqueID] != string.Empty) 
    { 
    CtrlID = Request.Form[hidSourceID.UniqueID]; 
    } 
} 
+0

컨트롤 이름이 비어있어 중계기 내에서 해당 컨트롤을 찾지 못했습니다. 이걸 어떻게 찾을 수 있을까요? – djmj

+0

첫 페이지에서 "Page"를 누르십시오. 요청은 page 여야합니다. 요청 – LarryBud

+0

@LarryBud : 감사합니다. –

11

http://geekswithblogs.net/mahesh/archive/2006/06/27/83264.aspx

이 pageload.This에서 포스트 백을 발생하는 컨트롤의 이름을 찾는 데 도움이
private string getPostBackControlName() 
    { 
     Control control = null; 
     //first we will check the "__EVENTTARGET" because if post back made by  the controls 
     //which used "_doPostBack" function also available in Request.Form collection. 

     string ctrlname = Page.Request.Params["__EVENTTARGET"]; 
     if (ctrlname != null && ctrlname != String.Empty) 
     { 
      control = Page.FindControl(ctrlname); 
     } 

     // if __EVENTTARGET is null, the control is a button type and we need to 
     // iterate over the form collection to find it 
     else 
     { 
      string ctrlStr = String.Empty; 
      Control c = null; 
      foreach (string ctl in Page.Request.Form) 
      { 
       //handle ImageButton they having an additional "quasi-property" in their Id which identifies 
       //mouse x and y coordinates 
       if (ctl.EndsWith(".x") || ctl.EndsWith(".y")) 
       { 
        ctrlStr = ctl.Substring(0, ctl.Length - 2); 
        c = Page.FindControl(ctrlStr); 
       } 
       else 
       { 
        c = Page.FindControl(ctl); 
       } 
       if (c is System.Web.UI.WebControls.Button || 
         c is System.Web.UI.WebControls.ImageButton) 
       { 
        control = c; 
        break; 
       } 
      } 

     } 
     return control.ID; 
    } 
+0

[이 버전] (http://stackoverflow.com/a/3509755/2415524)은 2016-07-22로 업데이트되었습니다. – mbomb007

0

나를 도와 :

관련 문제