将代码中的公共字符串放入ListView的布局模板中

时间:2009-10-17 05:45:34

标签: asp.net data-binding listview

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>

我知道如果它不在数据绑定控件中,它将在页面内工作。 我需要的是一种使用内联代码块访问变量的方法。

有可能吗? 任何人都可以指出我正确的方向吗?

顺便说一句,我知道将它绑定在代码隐藏和所有内容中。 如果有的话,我正在寻找具体的解决方案,如果没有,我正在寻找确认。

3 个答案:

答案 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的数据绑定。