В моем коде я создаю пункты меню динамически:C# asp.net Почему мое руководство __doPostBack запускается только один раз?
string listClientID = BulletedList1.ClientID.Replace('_', '$');
int counter = 0;
foreach (DataRow dataRow in database.DataTable.Rows)
{
// Add Button
ListItem listItem = new ListItem();
listItem.Value = "buttonItem" + Convert.ToString(dataRow["rank"]);
listItem.Text = " " + Convert.ToString(dataRow["title"]);
listItem.Attributes.Add("onclick", "__doPostBack('" + listClientID + "', '"+ counter.ToString() +"')");
BulletedList1.Items.Add(listItem);
counter++;
}
Это меню находится внутри панели обновления:
<div id="MenuItemBox">
<asp:BulletedList
ID="BulletedList1"
runat="server"
OnClick="MenuItem_Click"
>
</asp:BulletedList>
</div>
То, что я хочу, когда ListItem щелкают он выполняет обратную передачу. Но когда я запускаю это, событие onclick запускается только один раз.
Например. У меня есть 4 списка. Когда я нажимаю первый элемент при первом запуске события onclick. Теперь я нажимаю на второй элемент, также выполняется событие onclick. Но когда я теперь снова нажимаю на первый элемент, событие onclick не запускается.
Когда я проверяю консоль ошибок в FireFox или Oprah, я не получаю никаких ошибок.
Так что мой вопрос: как я могу исправить это и что я делаю неправильно?
В моей page_load у меня есть проверка на isPostBack. Если есть что-то вроде if (! IsPostBack) {build menu}. __doPostBack не исчезает – Martijn
Thnx для ответа, но почему вы используете OnInit, а не Page_Load? – Martijn
Я думал о ViewState. Разница заключается в том, где назначать значения, которые будут сохранены в ViewState (в Init или Load). Поэтому, если он исправит вашу проблему, мы сможем подробно изучить ее. Так теперь это исправлено? – Danil