2010-01-05 117 views
0

我有这样的用户控件:ASP.NET用户控件

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="cite.ascx.cs" Inherits="cite" %> 

背后代码:

[ParseChildren(typeof(Reference), DefaultProperty = "References", ChildrenAsProperties = true)] 
public partial class cite : System.Web.UI.UserControl { 

    public cite() { 
     this.References = new ReferenceCollection(); 
    } 

    [PersistenceMode(PersistenceMode.InnerProperty)] 
    public ReferenceCollection References { get; private set; } 

    protected override void Render(HtmlTextWriter writer) { 
     writer.Write("<ul>"); 
     this.References.ForEach(reference => reference.Render(writer)); 
     writer.Write("</ul>"); 
    } 
} 

public class ReferenceCollection : List<Reference> { } 

public abstract class Reference { 
    public string Title { get; set; } 
    public abstract void Render(HtmlTextWriter writer); 
} 

public class Book : Reference { 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public int Edition { get; set; } 
    public string Place { get; set; } 
    public string LocalTitle { get; set; } 
    public int LocalPublished { get; set; } 
    public string ISBN { get; set; } 
    public int Page { get; set; } 

    public override void Render(HtmlTextWriter writer) { 
     writer.Write(string.Format("<li><cite><span style=\"text-transform: uppercase;\">{0}</span>, {1}. <i>{3}</i>. {4}. vyd. {5} : {6}, {7}. ISBN {8} S. {9}.</cite></li>", LastName, FirstName, Title, Edition, Place, LocalTitle, LocalPublished, ISBN, Page)); 
    } 
} 

public class Web : Reference { 
    public string Site { get; set; } 
    public DateTime Published { get; set; } 
    public DateTime Cited { get; set; } 
    public Uri URL { get; set; } 

    public override void Render(HtmlTextWriter writer) { 
     writer.Write(string.Format("<li><cite><i>{0}</i> [online]. {1}, {2}, [cit. {3}]. URL: &lt;<a href=\"{4}\" rel=\"nofollow\" style=\"text-decoration: none; color: black;\">{4}</a>&gt;", Title, Site, Published.ToSlashedString(), Cited.ToSlashedString(), URL)); 
    } 
} 

,我这样称呼它:

<asp:references runat="server"> 
    <asp:Web Title="F-14 Tomcat" Site="Wikipedia" Published="2005-09-23" Cited="2005-10-08" URL="http://en.wikipedia.org/w/index.php?title=F-14_Tomcat&oldid=19416063" /> 
    <asp:Book FirstName="David" LastName="Donald" Title="The Pocket Guide to Military Aircraft and the World's Airforces" Edition="1" Place="Praha" LocalTitle="Kapesní encyklopedie Vojenská letadla" LocalPubliched="2002" ISBN="80-7181-701-5" Page="76" /> 
</asp:references> 

控制也注册在web.config文件中。但是< asp:Web/>和< asp:Book/>标记未知。我只想解析用户控件的内部内容,创建类的实例(WebBook)并将它们添加到控件的参考文献属性。

回答

1

您尚未将Web或Book定义为UserControl。他们需要被定义为这样才可以使用它们。请注意,它们仍然可以从Reference中派生,但Reference必须从UserControl派生。您还需要在您的页面中使用register,然后才能使用它们。

1

看看这个:http://www.west-wind.com/WebLog/posts/200.aspx,这部分:集合成员级别,更多关于在控件中定义集合的信息。您还需要为您的案例设置DesignerSerializationVisibility属性。

也有这样的: http://www.west-wind.com/WebLog/posts/7060.aspx How do you build an ASP.NET custom control with a collection property?

我知道,这些处理自定义控件,但两人的工作是相同的,我不知道多少支持用户控件执行如何支持自定义的孩子。