Внутри формы asp.net у меня есть несколько динамически сгенерированных кнопок, все эти кнопки представляют форму, есть ли способ получить, какая кнопка отправила форму в событие загрузки страницы?
Аргумент 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;
...
}
Не очень элегантный, но вы понимаете...
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
}
}
Request.Form["__EVENTTARGET"]
даст вам кнопку, в которой была сделана обратная передача
попробуйте этот код в событии загрузки страницы
string eventtriggeredCategory = Request.Form["ctl00$ContentPlaceHolder1$ddlCategory"];
если eventtriggeredCategory возвращает любое значение, оно произвело событие ddlCategory
это отлично работает для меня
Спасибо Jidhu
Вы можете попробовать:
if (this.Page.Request.Form[this.btnSave.ClientID.Replace("_", "$")] != null) {
}
this.Page.Request.Params.Get("__EVENTTARGET").Contains("btnSave")
Это не будет работать, если ваш код находится внутри пользовательского элемента управления:
Request.Form.AllKeys.Contains("btnSave") ...
Вместо этого вы можете попробовать следующее:
if (Request.Form.AllKeys.Where(p => p.Contains("btnSave")).Count() > 0)
{
// btnSave was clicked, your logic here
}
Используйте CommandArgument свойство, чтобы определить, какая кнопка представляет форму.
Изменить: Я только понял, вы сказали, что вам нужно это в PageLoad, это работает только для события Click server side, а не для PageLoad.