2011-09-01 29 views
26

Tôi có hai nút:Kiểm soát nào đã gây ra postback?

<asp:Button ID="Button1" runat="server" Text="Button" /> 
<asp:Button ID="Button2" runat="server" Text="Button" /> 

Làm thế nào tôi có thể xác định trên PageLoad mà một trong hai này gây ra các postback? Có một giải pháp ngắn như tôi biết chỉ có hai điều khiển có thể gây ra postback này?

+3

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

Trả lời

43

Bạn có thể sử dụng phương pháp này để có được sự kiểm soát đã gây ra postback:

/// <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; 
} 
+0

Điều này không tìm thấy Điều khiển nếu nó nằm trong bộ lặp do tên điều khiển trống. Bất kỳ ý tưởng làm thế nào để tìm thấy điều này? – djmj

+0

"Trang" trong Page.Request đầu tiên phải là trang.Yêu cầu – LarryBud

+0

@LarryBud: Tốt, cảm ơn. –

11

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

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

[Phiên bản này] (http://stackoverflow.com/a/3509755/2415524) được cập nhật kể từ 2016-07-22. – mbomb007

0

này giúp tìm tên của điều khiển gây ra postback trong pageload.This giúp tôi .Hy vọng điều này cũng giúp người khác quá

<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]; 
    } 
} 
Các vấn đề liên quan