在我的代码中,我动态创建菜单项:
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>
我想要的是当点击列表项时它会执行回发。但是当我运行它时,onclick事件只运行一次。
例如。我有4个列表项目。当我第一次执行onclick事件时单击第一个项目。现在我单击第二个项目,也会执行onclick事件。但是,当我现在再次单击第一个项目时,onclick事件不会被触发。
当我在FireFox或Oprah中检查错误控制台时,我没有收到任何错误。
所以我的问题是:如何解决这个问题以及我做错了什么?
答案 0 :(得分:1)
似乎你需要在回发后重新绑定它。 在哪里添加项目到菜单,你在检查IsPostBack属性? 请在首次加载和postpack后比较html,看看_dopostback是否消失。
然后尝试删除IsPostBack检查。 我的代码运行良好。 就是这样。
public partial class _Default : System.Web.UI.Page {
protected void Page_Load (object sender, EventArgs e) { }
protected override void OnInit (EventArgs e) {
base.OnInit(e);
//if (!IsPostBack) {
string listClientID = BulletedList1.ClientID.Replace('_', '$');
int counter = 0;
List<SomeClass> items = new List<SomeClass>(){ new SomeClass() { Rank = 1, Title = "2"},
new SomeClass () {Rank = 2, Title = "Two"}};
foreach (var item in items) {
// Add Button
ListItem listItem = new ListItem();
listItem.Value = "buttonItem" + item.Rank;
listItem.Text = " " + item.Title;
listItem.Attributes.Add("onclick", "__doPostBack('" + listClientID + "', '" + counter.ToString() + "')");
BulletedList1.Items.Add(listItem);
counter++;
}
//}
}
protected void MenuItem_Click (object sender, BulletedListEventArgs e) {
Response.Write(e.Index);
}
class SomeClass {
public int Rank;
public string Title;
}
}
答案 1 :(得分:0)
可能是UpdatePanel造成了麻烦。我会尝试将它拉出UpdatePanel然后会看到(我相信它应该)如果有效吗?
其次,您可以只填充列表项值和文本,然后在mnuMainMenu_MenuItemClick(对象发送者,MenuEventArgs e)事件下填充;查找已被点击的特定项目(e.Item。*公共属性),然后可能会使用Response.Redirect()来完成工作;好吧,只是大声思考......