嗨,我对asp.net转发器有点问题
我正在构建一个类别轮播,动态类别由转发器输出。 每个项都是一个LinkButton控件,它将类别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();
}
这里有什么想法吗?
答案 0 :(得分:0)
在您显示的categoriesCarouselRepeater_ItemCommand代码中,您将CommandArgument分配给名为'SelectedCategory'的属性。
这不应该将属性分配给'SelectedID'属性吗?
**编辑..
我看到的问题是两种情况之一:
1)您没有为每个回发重新绑定转发器,因此您的ItemTemplate中的表达式未被评估 - 转发器的输出将在每次回发时保持不变。
OR
2)您使用每个回发重新绑定转发器控件,但是,在第一次单击LinkButton时,转发器控件在ItemCommand事件处理程序触发之前被重新绑定,因此,'SelectedID'属性直到中继器完成输出后才设置。
如果您第二次单击其中一个LinkButtons,则先前选择的ID将在呈现转发器控件内容时处于视图状态,因此在呈现已单击的类别时落后一步,等等...