Wie kann ich beim Postback überprüfen, welches Steuerelement das Postback im Page_Init-Ereignis verursacht

Wie kann ich beim Postback überprüfen, welches Steuerelement das Postback im Page_Init-Ereignis verursacht.

protected void Page_Init(object sender, EventArgs e) { //need to check here which control cause postback? } 

Vielen Dank

   

Ich sehe, dass es bereits einige gute Ratschläge und Methoden gibt, wie man die Post zurück Kontrolle bekommt. Ich fand jedoch eine andere Webseite ( Mahesh-Blog ) mit einer Methode, die Post-Back-Control-ID abzurufen.

Ich werde es hier mit einer kleinen Änderung veröffentlichen, einschließlich der Erweiterung. Hoffentlich ist es auf diese Weise nützlicher.

 ///  /// Gets the ID of the post back control. /// /// See: http://geekswithblogs.net/mahesh/archive/2006/06/27/83264.aspx ///  /// The page. ///  public static string GetPostBackControlId(this Page page) { if (!page.IsPostBack) return string.Empty; 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 controlName = page.Request.Params["__EVENTTARGET"]; if (!String.IsNullOrEmpty(controlName)) { control = page.FindControl(controlName); } else { // if __EVENTTARGET is null, the control is a button type and we need to // iterate over the form collection to find it // ReSharper disable TooWideLocalVariableScope string controlId; Control foundControl; // ReSharper restore TooWideLocalVariableScope 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")) { controlId = ctl.Substring(0, ctl.Length - 2); foundControl = page.FindControl(controlId); } else { foundControl = page.FindControl(ctl); } if (!(foundControl is IButtonControl)) continue; control = foundControl; break; } } return control == null ? String.Empty : control.ID; } 

Update (2016-07-22): Die Typüberprüfung für Button und ImageButton geändert, um nach IButtonControl zu suchen, damit Postbacks von Steuerelementen von Drittanbietern erkannt werden können.

Hier ist ein Code, der für Sie geeignet ist (aus dem Blog von Ryan Farley )

 public static Control GetPostBackControl(Page page) { Control control = null; string ctrlname = page.Request.Params.Get("__EVENTTARGET"); if (ctrlname != null && ctrlname != string.Empty) { control = page.FindControl(ctrlname); } else { foreach (string ctl in page.Request.Form) { Control c = page.FindControl(ctl); if (c is System.Web.UI.WebControls.Button) { control = c; break; } } } return control; } 

Entweder direkt in Form Parametern oder

 string controlName = this.Request.Params.Get("__EVENTTARGET"); 

Bearbeiten : Um zu überprüfen, ob ein Steuerelement ein Postback verursacht hat (manuell):

 // input Image with name="imageName" if (this.Request["imageName"+".x"] != null) ...;//caused postBack // Other input with name="name" if (this.Request["name"] != null) ...;//caused postBack 

Sie könnten auch alle Steuerelemente durchlaufen und überprüfen, ob einer von ihnen einen postBack mit dem obigen Code verursacht hat.

Wenn Sie überprüfen möchten, welches Steuerelement das Postback verursacht hat, können Sie einfach ["__EVENTTARGET"] mit dem Steuerelement vergleichen, an dem Sie interessiert sind:

 if (specialControl.UniqueID == Page.Request.Params["__EVENTTARGET"]) { /*do special stuff*/ } 

Dies setzt voraus, dass Sie das Ergebnis sowieso nur mit einer beliebigen Erweiterungsmethode GetPostBackControl(...) . Es kann nicht jede Situation behandeln, aber wenn es funktioniert, ist es einfacher. Außerdem werden Sie die Seite nicht nach einem Steuerelement durchsuchen, das Sie nicht interessiert haben.

 if (Request.Params["__EVENTTARGET"] != null) { if (Request.Params["__EVENTTARGET"].ToString().Contains("myControlID")) { DoWhateverYouWant(); } } 

Angenommen, es handelt sich um ein Server-Steuerelement, können Sie Request["ButtonName"]

Um festzustellen, ob auf eine bestimmte Schaltfläche geklickt wurde: if (Request["ButtonName"] != null)

Als Ergänzung zu vorherigen Antworten müssen Sie, um Request.Params["__EVENTTARGET"] zu verwenden, die folgende Option einstellen:

 buttonName.UseSubmitBehavior = false; 

Um den genauen Namen des Steuerelements zu erhalten, verwenden Sie:

  string controlName = Page.FindControl(Page.Request.Params["__EVENTTARGET"]).ID;