получить идентификатор кнопки отправки

2

Внутри формы asp.net у меня есть несколько динамически сгенерированных кнопок, все эти кнопки представляют форму, есть ли способ получить, какая кнопка отправила форму в событие загрузки страницы?

Теги:

7 ответов

8
Лучший ответ

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

private void MyClickEventHandler(object sender, EventArgs e)
{
    Button theButton = (Button)sender;
    ...
}

Изменить: Подождите, на этапе загрузки? Это немного хитрость. Одна вещь, о которой я могу думать, заключается в следующем: в коллекции формы запроса будет содержаться ключ/значение для кнопки отправки, но не для остальных. Поэтому вы можете сделать что-то вроде:

protected void Page_Load(object sender, EventArgs e)
{
    Button theButton = null;
    if (Request.Form.AllKeys.Contains("button1"))
        theButton = button1;
    else if (Request.Form.AllKeys.Contains("button2"))
        theButton = button2;
    ...
}

Не очень элегантный, но вы понимаете...

  • 0
    да, я знаю, но мне это нужно при загрузке страницы, событие вызывается после загрузки страницы
  • 0
    Вы уверены, что кнопки существуют в коллекции request.forms?
Показать ещё 5 комментариев
1
protected void Page_Load(object sender, EventArgs e) {            
    string id = "";
    foreach (string key in Request.Params.AllKeys) {
        if (!String.IsNullOrEmpty(Request.Params[key]) && Request.Params[key].Equals("Click"))
            id = key;
    }
    if (!String.IsNullOrEmpty(id)) {
        Control myControl = FindControl(id);
        // Some code with myControl
    }
}
0

Request.Form["__EVENTTARGET"] даст вам кнопку, в которой была сделана обратная передача

0

попробуйте этот код в событии загрузки страницы

string eventtriggeredCategory = Request.Form["ctl00$ContentPlaceHolder1$ddlCategory"];

если eventtriggeredCategory возвращает любое значение, оно произвело событие ddlCategory

это отлично работает для меня

Спасибо Jidhu

0

Вы можете попробовать:

if (this.Page.Request.Form[this.btnSave.ClientID.Replace("_", "$")] != null) {

}
  • 0
    он всегда вернет true, если кнопка на форме @patrick
  • 0
    У меня есть 3 кнопки в моей форме, и она появляется в запросе только при нажатии на нее. Но другой вариант - использовать LinkButton, а затем он заполняет __EVENTTARGET, и вы можете использовать что-то вроде: this.Page.Request.Params.Get("__EVENTTARGET").Contains("btnSave")
Показать ещё 1 комментарий
0

Это не будет работать, если ваш код находится внутри пользовательского элемента управления:

Request.Form.AllKeys.Contains("btnSave") ...

Вместо этого вы можете попробовать следующее:

if (Request.Form.AllKeys.Where(p => p.Contains("btnSave")).Count() > 0)
{
    // btnSave was clicked, your logic here
}
-3

Используйте CommandArgument свойство, чтобы определить, какая кнопка представляет форму.

Изменить: Я только понял, вы сказали, что вам нужно это в PageLoad, это работает только для события Click server side, а не для PageLoad.

  • 0
    И в любом случае, CommandArgument не содержит ссылку на кнопку, только значение для CommandArgument, установленное в кнопке.
  • 0
    хорошо, когда программист динамически генерирует кнопку, он также может установить параметр commandargument, верно?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню