2011-09-01 7 views
26

私は2つのボタンがあります。私はこの二つのうちの一つは、ポストバックの原因となったpageLoadに決定することができますどのようにポストバックの原因となったコントロールは何ですか?

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

を? このポストバックを引き起こす可能性のあるコントロールが2つしかないことを知っているので、短所はありますか?

/// <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.Requestの "Page"はpage.Requestである必要があります – 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

が私を助けた:

関連する問題