Есть ли способ узнать, был ли нажат элемент управления в событии PageLoad? - PullRequest
1 голос
/ 29 июня 2011

Я создал 2 кнопки программно.Теперь я хочу знать, какая из них была нажата во время загрузки страницы .... Кнопка будет запускать событие загрузки страницы, а затем свое собственное событие.

Перед тем, как запустить собственное событие, я хочу знать всобытие загрузки страницы, если какая кнопка была нажата.

Есть ли способ узнать?

Мои кнопки такие

   Button btnMoveThread = new Button();
        btnMoveThread.Text = "1";
        btnMoveThread.Command += ModeratorButtonPassTo_Click;

   Button btnMoveThread = new Button();
        btnMoveThread.Text = "2";
        btnMoveThread.Command += ModeratorButtonPassTo_Click;

Эта функция не работает:

 public static System.Web.UI.Control GetPostBackControl(System.Web.UI.Page page)
    {
        Control control = null;
        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 controls ...
                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;
    }

Ответы [ 3 ]

1 голос
/ 29 июня 2011

Вы можете определить это, указав, какой элемент управления вызвал обратную передачу, до того, как будет вызван его обработчик событий. например,

string sender = page.Request.Params.Get("__EVENTTARGET");
Response.Write(sender);        
0 голосов
/ 29 июня 2011

Вам нужно добавить кнопки перед постом назад, чтобы вы могли получить к ним доступ во время поста назад, вероятно, в INIT страницы. Я изменил его, чтобы он компилировался, и добавил свойство ID к кнопкам:

    Button btnMoveThread = new Button();
    btnMoveThread.Text = "1";
    btnMoveThread.ID = "Thread1";
    btnMoveThread.Command += ModeratorButtonPassTo_Click;
    DivContent.Controls.Add(btnMoveThread);

    Button btnMoveThread2 = new Button();
    btnMoveThread2.Text = "2";
    btnMoveThread2.ID = "Thread2";
    btnMoveThread2.Command += ModeratorButtonPassTo_Click;
    DivContent.Controls.Add(btnMoveThread2);

Затем в вашей функции вам нужно перебрать ключи request.form:

    int KeyCount = page.Request.Form.AllKeys.Length;
    for (int i = 0; i < KeyCount; i++)
    {
        if (page.Request.Form.AllKeys[i] == "Thread1")
        {
            return page.FindControl("Thread1");
        }
        if (page.Request.Form.AllKeys[i] == "Thread2")
        {
            return page.FindControl("Thread2");
        }
    }

Так как вы добавляете кнопки в коде, а не в дизайнере, элемент управления поиском будет нулевым, если вы не добавите их обратно до обратной передачи, как я предложил в INIT на странице.

0 голосов
/ 29 июня 2011

ASP.NET работает, отправляя клиентскую форму с двумя дополнительными значениями, __EVENTTARGET и __EVENTARGUMENT. ASP.NET использует их, чтобы определить, какой элемент управления найти и какое событие вызвать. Вы могли бы сделать:

if (IsPostBack)
{
    string controlId = Request["__EVENTTARGET"];
    // Do something with the control Id.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...