【发布时间】:2013-11-22 03:25:31
【问题描述】:
我在转发器中有一个 UserControl。中继器的数据源来自 SQL Server。
用户控件的 .cs - MoviePanel.ascx.cs:
public int myMovieID { get; set; }
public string myMovieName { get; set; }
public string myMovieDescription { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
MovieIDLbl.Text = myMovieID.ToString();
MovieNameLbl.Text = myMovieName;
DescriptionLbl.Text = myMovieDescription;
}
ASPX 页面:
<asp:Repeater ID="Repeater1" DataSourceID="ListOfMoviesDS" runat="server">
<ItemTemplate>
<uc1:MovieDetailPanel runat="server" myMovieID='<%# Eval("MovieID") %>'
myMovieName='<%# Eval("movieName") %>'
myMovieDescription='<%# Eval("movieDescription") %>'
id="MovieDetailPanel1" />
<asp:Label ID="Label1" runat="server"
Text='<%# Eval("MovieID") %>'></asp:Label>
<asp:Label ID="Label2" runat="server"
Text='<%# Eval("movieName") %>'></asp:Label>
<asp:Label ID="Label3" runat="server"
Text='<%# Eval("movieDescription") %>'></asp:Label>
</ItemTemplate>
</asp:Repeater>
这里发生了一件非常奇怪的事情。这些值没有传递给 UserControl。但是,如果我将标签放在用户控件下方并使用Eval() 设置文本,它就可以工作。您可能认为用户控件可能是问题所在。但是如果我手动输入一些东西,比如代替<%# Eval("movieName") %>,它会被传递给用户控件并被显示。
我不知道!如果问题出在 Eval() 标签上,则也不应该获取文本。或者,如果问题出在 UserControl 上,我的手动文本不应该通过。我不知道为什么 Eval() 的值没有到达 UserControl。
【问题讨论】:
-
能否请您告诉我应该如何将值从后面的代码传递给 UserControl?我可以分配转发器的数据源,但是数据源中的值是如何传递给用户控件的?
-
与论坛网站不同,我们不使用“谢谢”、“感谢任何帮助”或Stack Overflow 上的签名。请参阅“Should 'Hi', 'thanks,' taglines, and salutations be removed from posts?.
-
您在页面生命周期的哪个阶段检查是否设置了值?您正在使用数据绑定表达式,因此这些表达式将在
DataBinding阶段设置。 -
我正在检查 UserControl 的 PageLoad 事件(如上例所示)。错了吗?
-
你的问题对我来说很有意义。你能告诉我在设置/绑定值之前我应该如何推迟控制?我的意思是,我可以添加一个事件函数来获取值,而不是从 Page_Load() 中获取值吗?