Проблема с панелью обновления при смене элемента управления внутри ретранслятора на стороне клиента - PullRequest
1 голос
/ 21 ноября 2011

У меня проблемы с использованием UpdatePanel и изменением атрибута 'class' элемента управления внутри повторителя с помощью 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>

- Codebehind -

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», класс меняется нормально, но когда я захожу в codebehind и получаю de 'class' элемента управления, чтобы проверить, помечен он или нет, я получаю только помеченные элементы управления в ItemDataBound повторителя, а не «aButton», отмеченные мной во время выполнения.

вот что я делаю, чтобы пометить «aButton»:

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

1 Ответ

1 голос
/ 21 ноября 2011

Когда вы изменяете свойство класса из клиентского кода, серверная часть об этом не узнает.

Вам нужно будет добавить скрытый <input> с помеченным / немакредированным, чтобы вы могли проверить содержимоес сервера на постбэк.

Другой подход заключается в sipmly, чтобы ваш постбэк обратно отправлял javscript на сервер, когда элемент меняется с помеченного / немакредированного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...