Repeater Control找到引发事件的对象

时间:2010-10-26 11:01:48

标签: asp.net

内部转发器控件HeaderTemplate我有一些LinkBut​​tons和Checkbox 我想找出引发事件的对象(Linkbutton或复选框)。

protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    switch(e.CommandSource)
    {
        case  LinkButton:some   work   here;
        case  CheckBox  :some  work  here;  
   }
}

当我写这样的代码时,我收到错误

 A switch expression or case label must be a bool, 
char, string, integral, enum, or corresponding nullable type    

如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

正如错误消息所述,您可以将bo与bool,char,string,integral,enum或相应的可空类型一起使用。在您的情况下,您想要比较类型。这可以通过if声明来实现:

if (e.CommandSource is LinkButton)
{

}
else if (e.CommandSource is CheckBox)
{

}

答案 1 :(得分:0)

首先,我非常确定复选框不会触发Repeater_ItemCommand事件,因为它不是Button(或者从Button继承的东西),因为只有按钮在Repeater中创建ItemCommand事件。您可以将CheckBox的AutoPostBack属性设置为true并处理它的OnClick事件,尽管您必须要小心能够找出哪个CheckBox触发了事件b / c所有CheckBox都将在您的代码中具有相同的事件处理程序文件,他们将不会在EventArgs中有一些由Repeater引发的事件将有的好信息。

此外,检查ItemCommand事件处理程序中的控件类型似乎既无效又有限制。如果在Repeater行中有相同类型的mulltiple控件需要不同的处理,则代码会中断。对于实际引发ItemCommand事件的控件,设置CommandName或Button的CommandArgument属性将允许您唯一地标识引发事件的控件,而不会受到类型检查的性能影响,而且它将更易于维护。

在ItemCommand事件处理程序中使用此代码:

switch(e.CommandName)
{
   case "LinkButtonCommandName1":
      .......
      break;
   case "LinkButtonCommandName2":
      .......
      break;
}