内部转发器控件HeaderTemplate我有一些LinkButtons和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
如何实现这一目标?
答案 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;
}