ASP.NET(VB)中的疑问
我在代码隐藏(ASPX.VB)中有一个公共变量
Public _orderCode As String = "Hello World"
在ASPX,我想内联访问它。 这也属于ListView的LayoutTemplate
<asp:ListView runat="server" ID="listView_OrderReplies"
DataKeyNames="ProductID"
DataSourceID="sdsProducts">
<LayoutTemplate>
<h1>Order Replies for Order Code = <%# _orderCode %></h1>
<asp:PlaceHolder ID="itemPlaceholder" runat="server" ></asp:PlaceHolder>
</LayoutTemplate>
<ItemTemplate>
<b>Name</b>: <%#Eval("ProductName")%><br />
<b>Stock</b>: <%#Eval("UnitsInStock")%><br />
<b>Price</b>: <%#Eval("UnitPrice")%> <br />
</ItemTemplate>
</asp:ListView>
也就是说,我希望这个内联绑定成功
<h1>Order Replies for Order Code = <%# _orderCode %></h1>
或
<h1>Order Replies for Order Code = <%= _orderCode %></h1>
我知道如果它不在数据绑定控件中,它将在页面内工作。 我需要的是一种使用内联代码块访问变量的方法。
有可能吗? 任何人都可以指出我正确的方向吗?
顺便说一句,我知道将它绑定在代码隐藏和所有内容中。 如果有的话,我正在寻找具体的解决方案,如果没有,我正在寻找确认。答案 0 :(得分:10)
可以完成,而且非常容易。只需处理OnLayoutCreated
事件,然后在DataBind()
控件上调用LayoutTemplate
方法(所有子控件也将自动数据绑定)。
<asp:ListView ID="lv" runat="server" OnLayoutCreated="lv_LayoutCreated">...</asp:ListView>
protected void lv_LayoutCreated(object sender, EventArgs e)
{
lv.Controls[0].DataBind();
}
只要确保那里的任何数据都被数据绑定,它就会在之前被实例化(在回发上也是如此)。
或者您可以在其中找到特定控件,并将数据绑定:lv.Controls[0].FindControl("id").DataBind();
如果您希望仅在ListView
数据绑定上进行数据绑定,而不是OnDataBound
事件中的数据绑定 - 但您必须定位不包含{{1}的控件或者你的itemPlaceholder
将再次数据绑定(这次没有数据):
ItemTemplate
答案 1 :(得分:3)
它无法完成或至少我怀疑它。我建议,使用文字控件或标签,并在代码隐藏时分配文本。
检查post。 Darko的回答是: 在呈现页面时执行内联代码,即。在Page_PreRender事件之后和Unload事件之前。因此,在数据绑定之后,您的内联代码可能是它的“goner”。
答案 2 :(得分:1)
此错误也在此处解决: http://www.codeproject.com/KB/aspnet/LayoutTemplate_DataBind.aspx
在这里: http://forums.asp.net/p/1201992/3319344.aspx#3319344
此处提供的解决方案是扩展或调整ListView控件并正确处理LayoutTemplate的数据绑定。