将codebehind中的公共字符串获取到ListView的LayoutTemplate中

nav*_*een 4 asp.net data-binding listview

ASP.NET(VB)中的一个疑问

我在代码隐藏中有一个公共变量(ASPX.VB)

Public _orderCode As String = "Hello World"
Run Code Online (Sandbox Code Playgroud)

在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>
Run Code Online (Sandbox Code Playgroud)

也就是说,我希望这种内联绑定能够成功

<h1>Order Replies for Order Code  = <%# _orderCode %></h1>
Run Code Online (Sandbox Code Playgroud)

要么

<h1>Order Replies for Order Code  = <%= _orderCode %></h1>
Run Code Online (Sandbox Code Playgroud)

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

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

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

Nik*_*vić 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();
}
Run Code Online (Sandbox Code Playgroud)

只要确保那里的任何数据都被数据绑定,它就会在之前被实例化(在回发上也是如此).

或者您可以在其中找到特定控件,并且数据绑定就是: lv.Controls[0].FindControl("id").DataBind();

如果你只想在ListView数据绑定上进行数据绑定,而不是在OnDataBound事件中进行数据绑定- 但是你必须定位一个不包含的控件itemPlaceholder,或者你ItemTemplate将再次数据绑定(这次没有数据):

protected void lv_DataBound(object sender, EventArgs e)
{
    if(lv.Controls.Count > 0)
        lv.Controls[0].FindControl("head").DataBind();
}
Run Code Online (Sandbox Code Playgroud)