【问题标题】:ASP.NET User ControlASP.NET 用户控制
【发布时间】:2010-01-05 12:46:55
【问题描述】:

我有这个用户控制:

<%@ 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 文件中注册。但是 标签是未知的。我只想解析用户控件的内部内容,创建类实例(WebBook)并将它们添加到控件的 References 属性中。

【问题讨论】:

    标签: asp.net user-controls


    【解决方案1】:

    您尚未将 Web 或 Book 定义为 UserControls。需要先定义它们,然后才能以这种方式使用它们。请注意,它们仍然可以从 Reference 派生,但 Reference 本身需要从 UserControl 派生。您还需要在您的页面中 register 他们才能使用它们。

    【讨论】:

      【解决方案2】:

      查看此内容: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?

      我知道这些处理自定义控件,但两者的工作方式相同,我不确定有多少支持用户控件支持自定义子项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多