Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态创建的html控件-检测单击事件?ASP.NETC#_C#_Asp.net - Fatal编程技术网

动态创建的html控件-检测单击事件?ASP.NETC#

动态创建的html控件-检测单击事件?ASP.NETC#,c#,asp.net,C#,Asp.net,我在Asp.net(C#)中从事一个项目,我有以下代码(C#),可以在运行时动态生成html按钮(针对列表中的每个项目): 在my.aspx文件中: <div id="myDiv" runat="server" ...></div> 在my.aspx.cs文件中: List<Item> list; private void Display() { foreach (Item item in list) AddButton(ite

我在Asp.net(C#)中从事一个项目,我有以下代码(C#),可以在运行时动态生成html按钮(针对列表中的每个项目):

在my.aspx文件中:

<div id="myDiv" runat="server" ...></div>

在my.aspx.cs文件中:

List<Item> list;

private void Display()
{
    foreach (Item item in list)
        AddButton(item);
}

private void AddButton(Item item)
{
    HtmlButton button = new HtmlButton();
    button.InnerText = item.Content;
    button.ID = item.name; 
    button.ServerClick += new EventHandler(Item_Click);
    myDiv.Controls.Add(button);
}

private void Item_Click(Object sender, EventArgs e)
{
    // HERE I WANT TO DO SOMETHING ON THE SPECIFICALLY
    // CLICKED BUTTON,
    // THE PROBLEM IS THAT I CAN'T KNOW WHICH BUTTON OF
    // THE DYNAMICALLY ADDED BUTTONS (BY THE AddButton()
    // FUNCTION) IS CLICKED, NOTE: I HAVE MORE THAN 10 ITEMS IN 
    // list. I MEAN I CAN'T PASS THE CLICKED BUTTON AS A                                              
    // PARAMETER TO THIS Item_Click FUNCTION, IN GENERAL, WHAT I
    // WANT IS SOMETHING LIKE:

    // Item_Click(Object sender, EventArgs e, HtmlButton clickedButton)

    // WITH SUCH DECLARATION OF Item_Click FUNCTION I CAN DO WHAT 
    // I WANT ON THE CLICKED BUTTON, BUT IT DOESN'T WORK THAT
    // WAY, BECAUSE EventHandler's PARAMETERS ARE: Object,      
    // EventArgs, AND IT WOULD NOT HELP ME TO CREATE MY CUSTOM
    // EVENTHANDLER BECAUSE HtmlButton.ServerClikc IS OF TYPE
    // EventHandler.
}
列表;
专用void Display()
{
foreach(列表中的项目)
添加按钮(项目);
}
专用无效添加按钮(项目)
{
HtmlButton button=新建HtmlButton();
button.InnerText=item.Content;
button.ID=item.name;
button.ServerClick+=新建事件处理程序(项\u单击);
myDiv.Controls.Add(按钮);
}
私有无效项\u单击(对象发送者,事件参数e)
{
//在这里,我想做一些具体的事情
//点击按钮,
//问题是我不知道该按哪个按钮
//动态添加的按钮(由AddButton()创建)
//功能),注意:我在
//列表。我的意思是我不能将单击的按钮作为
//此项的参数\u Click函数,通常是
//想要是这样的:
//项目单击(对象发送者、事件参数、HtmlButton Clicked按钮)
//有了这样的物品声明点击功能我能做什么
//我想点击按钮,但它不起作用
//因为EventHandler的参数是:Object,
//EventArgs,它不能帮助我创建自定义
//EVENTHANDLER,因为HtmlButton.ServerClikc的类型为
//事件处理程序。
}
有什么建议吗


谢谢你的帮助

您必须在不带if(!IsPostBack)的情况下在页面加载中填写列表

void页面加载(对象发送方,事件参数e)
{
//不要使用if(!IsPostBack),因为每次回发控件都会离开,并且必须注册控件。
列表=新列表();
添加(…);
添加(…);
添加(…);
}

我认为最好的方法不是每次加载页面时都填写列表,而是检查:
if(list==null)
void Page_Load(object sender, EventArgs e )
{
     // don`t use if(!IsPostBack) because every postback your contols leave and you must register your controls.
     list=new List<Item>();
     list.Add(...);
     list.Add(...);
     list.Add(...);

}