ASP.NET User Control - PullRequest
       1

ASP.NET User Control

0 голосов
/ 05 января 2010

У меня есть пользовательский элемент управления:

<%@ 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. Но теги и неизвестны. Я хочу просто проанализировать внутреннее содержимое пользовательского элемента управления, создать экземпляры классов ( Web или Book ) и добавить их в свойство References элемента управления.

Ответы [ 2 ]

1 голос
/ 05 января 2010

Проверьте это: http://www.west -wind.com / WebLog / posts / 200.aspx , этот раздел: Уровень элемента коллекции, для получения дополнительной информации об определении коллекций в элементах управления. Вам также необходимо установить атрибут DesignerSerializationVisibility для вашего случая.

Существует также это: http://www.west -wind.com / WebLog / сообщений / 7060.aspx Как создать пользовательский элемент управления ASP.NET со свойством коллекции?

Я знаю, что они имеют дело с настраиваемыми элементами управления, но оба работают одинаково, и я не уверен, насколько поддержка пользовательских элементов управления поддерживает настраиваемые дочерние элементы.

1 голос
/ 05 января 2010

Вы не определили Веб или Книгу как UserControls. Они должны быть определены как таковые, прежде чем вы сможете использовать их таким образом. Обратите внимание, что они все еще могут быть получены из Reference, но сама ссылка должна быть производной от UserControl. Вам также необходимо зарегистрировать их на своей странице, прежде чем вы сможете их использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...