ASP.NET模板用户控件“;货柜;关键词

ASP.NET模板用户控件“;货柜;关键词,asp.net,user-controls,Asp.net,User Controls,我正在使用模板用户控件。在控件的最终标记中,数据由Container关键字访问。我自由地使用“关键字”这个词,因为我不知道这是一个关键字,还是容器词的来源。下面是我书中的一个例子 //Address User Control markup <%@ Control Language="C#" AutoEventWireup="true" CodeFile="AddressUcTemplated.ascx.cs" Inherits="AddressUcTemplated" %> <

我正在使用模板用户控件。在控件的最终标记中,数据由Container关键字访问。我自由地使用“关键字”这个词,因为我不知道这是一个关键字,还是容器词的来源。下面是我书中的一个例子

//Address User Control markup
<%@ Control Language="C#" AutoEventWireup="true"
CodeFile="AddressUcTemplated.ascx.cs" Inherits="AddressUcTemplated" %>
<asp:PlaceHolder runat="server"
ID="PlaceHolderAddressTemplate">
</asp:PlaceHolder>
--

--

//使用用户控件的页面;Container关键字在下面的//语句中让我感到困惑
...
编辑家庭地址
地址行1:
...

我的示例代码如下:

<asp:Repeater runat="server">
    <ItemTemplate><%# Container.DataItem %></ItemTemplate>
</asp:Repeater>
是一个DataBoundLiteralControl,而
Container
是暴露于intellisense的变量。这还表明有一个
target
变量,它在intellisense中不显示,但编译时没有任何问题。请注意,这还允许您访问生成的类中所有私有的内容,如
\uu fileDependencies

有效,而
无效。同时,
创建了两个编译错误,1)“与'System.Convert.ToString(object,System.IFormatProvider)'匹配的最佳重载方法具有一些无效参数”和2)“参数1:无法从'void'转换为'object'

这看起来像是一个简单的例子,在
之间写入的内容都放在
Convert.ToString(…,CultureInfo.CurrentCulture)
中。它可能更高级,涉及不同的控件构建器、模板解析器和一点魔力,但我认为我的抽象工作足够好,可以理解这一点

//Naming Container Class
    public class AddressUcContainer : Control, INamingContainer
    {
    public AddressUcContainer(Address address)
    {
    this.Address = address;
    }
    public Address Address { get; set; }
    }
     //Page using the user control; the Container keyword is confusing me in the below //statement
...
<%@ Register src="AddressUcTemplated.ascx" tagname="AddressUcTemplated"
tagprefix="uc1" %>
        <uc1:AddressUcTemplated ID="AddressUcTemplated1"
        runat="server" AddressType="Home">
        <LayoutTemplate>
        <h1>Edit Home Address</h1>
        <table>
        <tr>
        <td>Address Line 1:</td>
        <td>
        <asp:TextBox ID="TextBoxAddress" runat="server"
        Text="<%#Container.Address.AddressLine1%>"></asp:TextBox>
        ...
<asp:Repeater runat="server">
    <ItemTemplate><%# Container.DataItem %></ItemTemplate>
</asp:Repeater>
public void __DataBind__control4(object sender, EventArgs e) {
    var target = (DataBoundLiteralControl)sender;
    var Container = (RepeaterItem)target.BindingContainer;
    target.SetDataBoundString(0, Convert.ToString(Container.DataItem, CultureInfo.CurrentCulture));
}