ASP.NET模板用户控件“;货柜;关键词
我正在使用模板用户控件。在控件的最终标记中,数据由Container关键字访问。我自由地使用“关键字”这个词,因为我不知道这是一个关键字,还是容器词的来源。下面是我书中的一个例子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" %> <
//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));
}