客户端类的Updatepanel问题改变中继器内的控制

本文关键字:中继器 改变 控制 问题 Updatepanel 客户端 | 更新日期: 2023-09-27 18:15:15

我在使用UpdatePanel和通过javascript更改repeater内控件的'class'属性时遇到了麻烦。

下面是一些代码:

——在aspx上——

<script type="text/javascript">
    function changeClass(ctl) {
        if (ctl.className == "marked") {
            ctl.className = "unmarked";
        } else {
            ctl.className = "marked";
        }
    }
</script>
<!-- some html -->
<asp:UpdatePanel ID="upp" runat="server">
    <ContentTemplate>
     <asp:Repeater ID="rpt1" runat="server" onitemdatabound="rpt1_ItemDataBound">
                        <ItemTemplate>
                            <a id="aButton" runat="server" href="javascript:void(0)">
                            <!-- some other controls -->
                            </a>
                        </ItemTemplate>
                    </asp:Repeater>
    </ContentTemplate>
</asp:UpdatePanel>
后台代码——

——

protected void rpt1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        MyClass obj = (MyClass)e.Item.DataItem;
        ((HtmlAnchor)e.Item.FindControl("aButton")).Attributes.Add("class", "marked");
        //some other code....
    }
}
//method called after the bind on 'rpt1'
private void mymethod()
{
    foreach (RepeaterItem ri in rpt1.Items)
    {
        HtmlAnchor aButton = (HtmlAnchor)ri.FindControl("aButton");
        if (Must-be-unmarked)
            aButton.Attributes.Add("class", "unmarked");
        aButton.Attributes.Add("OnClick", "changeClass(this);");
    }
}

问题是,当我点击一个"按钮"类正常改变,但是当我进入代码后,得到控制的"类"来检查它是否标记或未标记,我只得到在itemdataboundater中标记的控件,而不是"按钮"在执行时由我标记。

我是这样让"button"标记的:

private void checkMarked()
{
    foreach (RepeaterItem ri in rpt1.Items)
    {
        if (((HtmlAnchor)ri.FindControl("aButton")).Attributes["class"] == "marked")
        {
            //do something...
        }
    }
}

客户端类的Updatepanel问题改变中继器内的控制

当您从客户端代码更改类属性时,服务器端将不知道它。

您需要添加一个带有标记/未标记的隐藏<input>,以便您可以在回发时检查来自服务器的内容。

另一种方法是,当条目从标记/未标记更改时,简单地将javascript回发到服务器。