在ASP.NET重复器控件中动态分配用户控件的属性

6

我目前有一个重复器控件,在itemtemplate中有一个用户控件。这个用户控件渲染正常,但我正在尝试将数据项分配给重复器控件中的属性。

 <asp:Repeater ID="Repeater1" DataSourceID="EntityDataSource" runat="server">
    <ItemTemplate>
    <uc1:Request ID="Request1" runat="server" RequestId='<%# Eval("RequestId") %>' />
</ItemTemplate>

RequestId是一个Int32类型的变量。它本身没有被赋值。

我可以把eval放在用户控件外面,在itemtemplate中,这样它就可以正确地输出正确的id。

如果我删除整个eval,只输入一个数字,那么它就可以正常工作。

任何帮助都将不胜感激。

[更新]:问题已解决

我正在使用EntityDataSource,并且它自动绑定到了repeater上。它打印出了数据库中的所有信息,而没有任何codebehind。但是当我在code behind中加入Repeater1.DataBind();时,它就开始工作了。

我不知道为什么,但问题已经解决了。它现在成功地传递了值。我想这可能与页面生命周期有关。


你的代码中有个打字错误。不应该在 %> 后面加一个闭合的 ' 。 - Skorpioh
仍然没有任何作用。当我使用Eval时,RequestId就无法设置。如果我在用户控件上方的开放空间中执行<%# Eval("RequestId") %>,它会完美地打印在屏幕上。如果我硬编码数字,例如RequestId="2",它可以正常工作。但是,当按照上述方式完成时,它就无法工作。 - Adam
3个回答

4
如果你只是绑定一个整数的重复器集合,你需要使用这个代码:
<uc1:Request ID="Request1" runat="server" RequestId='<%# Container.DataItem %>' />

不要忘记为重复器或包含重复器控件的页面调用DataBind()。


2

您是否漏掉了末尾的'

请更改以下内容:

RequestId='<%# Eval("RequestId") %> />

为了

RequestId='<%# Eval("RequestId") %>' />

0
您可以通过使用Repeater控件的ItemDataBound事件来实现此功能,以便为控件设置动态属性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接