【问题标题】:Updatepanel issue with client side "class" changing of a control inside repeater客户端“类”更改中继器内控件的更新面板问题
【发布时间】:2012-01-03 03:58:26
【问题描述】:

我在使用 UpdatePanel 和通过 javascript 更改转发器内控件的“类”属性时遇到问题。

这里有一些代码:

--关于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);");
    }
}

问题是,当我单击“aButton”时,类会正常更改,但是当我进入代码隐藏并获取控件的“类”以检查它是标记还是未标记时,我只会得到标记的控件中继器的ItemDataBound,而不是我在执行时标记的“aButton”。

这是我为标记“aButton”所做的:

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

【问题讨论】:

    标签: c# javascript asp.net updatepanel


    【解决方案1】:

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

    您需要添加一个带有标记/取消标记的隐藏&lt;input&gt;,以便您可以在回发时检查来自服务器的内容。

    另一种方法是在项目从标记/取消标记更改时直接将您的 javscript 回发到服务器。

    【讨论】:

    • 感谢您的回复,我很想上课,但我的问题通过使用 HiddenField 解决方案解决了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 2013-11-09
    相关资源
    最近更新 更多