转发器中的页面变量

时间:2010-05-27 13:14:57

标签: c# asp.net repeater

嗨,我对asp.net转发器有点问题

我正在构建一个类别轮播,动态类别由转发器输出。 每个项都是一个LinkBut​​ton控件,它将类别id的参数传递给onItemClick处理程序。

此处理程序设置页面变量以跟踪所选类别ID的内容....

public String SelectedID
    {
        get
        {

            object o = this.ViewState["_SelectedID"];
            if (o == null)
                return "-1"; 
            else
                return (String)o;
        }

        set
        {
            this.ViewState["_SelectedID"] = value;
        }
    }

问题是,我无法在迭代通过转发器时读取此值,如下所示...

<asp:Repeater ID="categoriesCarouselRepeater" runat="server" 
                onitemcommand="categoriesCarouselRepeater_ItemCommand">
            <ItemTemplate>
            <%#Convert.ToInt32(Eval("CategoryID")) == Convert.ToInt32(SelectedID) ? "<div class=\"selectedcategory\">":"<div>"%>
 <asp:LinkButton ID="LinkButton1" CommandName="select_category" CommandArgument='<%#Eval("CategoryID")%>' runat="server"><img src="<%#Eval("imageSource")%>" alt="category" /><br />

</div>

</ItemTemplate>

</asp:Repeater>

在项目模板中调用<%=SelectedID%>但是当我尝试使用以下表达式时,SelectedID的值返回空..

<%#Convert.ToInt32(Eval("CategoryID")) == Convert.ToInt32(SelectedID) ? "match" : "not a match"%>

该值设置如下......

protected void categoriesCarouselRepeater_ItemCommand(object source, RepeaterCommandEventArgs e)
    {

       SelectedID = e.CommandArgument.ToString();
}

这里有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在您显示的categoriesCarouselRepeater_ItemCommand代码中,您将CommandArgument分配给名为'SelectedCategory'的属性。

这不应该将属性分配给'SelectedID'属性吗?

**编辑..

我看到的问题是两种情况之一:

1)您没有为每个回发重新绑定转发器,因此您的ItemTemplate中的表达式未被评估 - 转发器的输出将在每次回发时保持不变。

OR

2)您使用每个回发重新绑定转发器控件,但是,在第一次单击LinkBut​​ton时,转发器控件在ItemCommand事件处理程序触发之前被重新绑定,因此,'SelectedID'属性直到中继器完成输出后才设置。

如果您第二次单击其中一个LinkBut​​tons,则先前选择的ID将在呈现转发器控件内容时处于视图状态,因此在呈现已单击的类别时落后一步,等等...