识别ItemTemplate中的对象并且不触发事件

时间:2012-08-02 12:07:20

标签: c# asp.net .net telerik rad-controls

我正在使用带有ItemTemplate的RadListView控件,该控件包含一个按钮,如下所示:

<ItemTemplate>
    <tr class="rlvI">
        //more TD elements here
        <td>
            <telerik:RadButton ID="ENABLEDToggle" runat="server" Width="75" ButtonType="StandardButton" AutoPostBack="true"
            ToggleType="CustomToggle" Checked='<%# Enabled_Converter(Eval("ENABLED")) %>' OnCheckedChanged="TaskStateChange_Clicked">
                <ToggleStates>
                    <telerik:RadButtonToggleState Text="Enabled" />
                    <telerik:RadButtonToggleState Text="Disabled" />
                </ToggleStates>
            </telerik:RadButton>
        </td>
    </tr>
</ItemTemplate>

我的第一个问题是为什么当按下我的按钮时,我没有输入我的TaskStateChange_Clicked事件处理程序?就好像事件永远不会被解雇一样。

其次,每当单击一个按钮时,如何获取与该行关联的对象?

1 个答案:

答案 0 :(得分:2)

关于第一个问题,请检查您对RadListView的约束方式。如果控件与每个回发上的数据绑定,通常会出现这样的问题。所以如果你有像

这样的东西
void Page_Load(object sender, EventArgs e)
{
    ...
    RadListView1.DataSource = dataSource;
    RadListView1.DataBind();
    ...
}

替换为

void Page_Load(object sender, EventArgs e)
{
    ...
    if (!this.IsPostBack)
    {
        RadListView1.DataSource = dataSource;
        RadListView1.DataBind();
    }
    ...
}

从评论中更新。另一个原因可能是您的按钮类型为StandardButton,而spec表示仅在按钮类型时触发事件CheckedChangedToggleButton

至于第二个问题,请考虑使用RadListView的ItemCommand事件。通过这种方式,您可以使用CommandArgument RadButton属性,并传递您想要的任何信息,例如对象的ID。