Единственное, что должно быть запущено в вашем Page_Load
, - это код, который вы хотите выполнять всегда при каждом запросе, ИЛИ иметь код, который вы хотите запускать только один раз, завернутый в проверку после возврата. Например:
protected void Page_Load(object sender, EventArgs e)
{
// Put the all code you need to run with EVERY request here
// Then add a post back check for any code you want to ONLY run on the very
// first request to the page.
if (!IsPostBack)
{
// Code you only want to run the first time. Usually setup code to initalize
// DropDownLists, Grids or pre populate a form, etc...
}
}
Ваш LinkButton
код должен быть полностью сам по себе в обработчике кликов:
protected void yourLinkButton_Click(object sender, EventArgs e)
{
// code you want to execute when your button is clicked. This will run AFTER
// the Page_Load has finished.
}
Теперь, если ваш LinkButton
используется в GridView
, Repeater
или некотором типе элемента управления, который требует связывания, чтобы заполнить его, то вам, вероятно, потребуется реализовать обработчик события RowCommand
, чтобы выяснить, какой LinkButton
нажата. Вы также можете привязать данные к его свойству CommandArgument
, чтобы передать некоторые уникальные данные, специфичные для строки, в четный обработчик.
Если у вас есть куча LinkButton
с использованием одного и того же обработчика, в худшем случае будет приведено sender
и сравнение значений ID
.
protected void yourLinkButton_Click(object sender, EventArgs e)
{
LinkButton btn = (LinkButton)(sender);
if (btn.ID.Equals("Some control name you want to compare"))
{
// do something
}
}
Если я не в курсе вашего вопроса, просто оставьте комментарий, и я постараюсь разобраться с ним.
РЕДАКТИРОВАТЬ: На основании вашего комментария кажется, что вы должны знать, какой Button
он находится в Page_Load
из-за некоторых других ограничений. Ну, нет чистого способа сделать это в Page_Load
, но это можно сделать. Вам нужно будет проверить клавиши Request.Form
и проверить определенное имя кнопки (только клавиши Button
, которые были нажаты, должны быть включены в клавиши). Например:
if (Request.Form.AllKeys.Contains("yourButton1"))
{
// then do something based on yourButton1
}
else if (Request.Form.AllKeys.Contains("yourButton2"))
{
// then do something based on yourButton2
}
// etc...
Я не думаю, что есть какой-то другой чистый способ обойти это. Было бы неплохо, если бы фреймворк включал элемент управления, вызвавший обратную передачу, в одном из свойств sender
.
Другое Править: Это полностью ускользнуло от меня. Приведенное выше редактирование было необходимо сделать для Button
, так как он не заполняет __EVENTTARGET
. Так как вы используете LinkButton
, вы можете использовать следующее, чтобы получить контроль, вызвавший возвращение сообщения:
string controlNameThatCausedPostBack = Request.Form["__EVENTTARGET"];
Я проверил это с LinkButton
, и оно работает как положено.
Надеюсь, что наконец решит вашу проблему:)