Как отобразить список пользовательских элементов управления в ASP.NET WebForms - PullRequest
5 голосов
/ 16 февраля 2011

Это на самом деле не вопрос, поэтому я надеюсь, что вас не уволят! Поэтому я должен сделать твиттер, как временную шкалу, суперпозицию блоков, содержащих информацию.

Я действительно не знаю, как это сделать .. Проблема в том, что количество блоков не одинаково каждый раз, иногда это будет только 1 блок, иногда два, а иногда и больше ..

Так я могу написать HtmlWriter, чтобы написать html напрямую? Я довольно новичок в asp.net, так что, возможно, это будет легче сделать! С WebUserControl, может быть, блок = wuc, так что я могу добавить количество wuc, которое мне нужно ... Я совершенно заблудился, так что, может быть, кто-то уже сделал это и может поставить меня на правильный путь ..

Спасибо, что читаете!

1 Ответ

10 голосов
/ 16 февраля 2011

Вы на правильном пути, создавая пользовательский контроль для представления "блока", но вам не хватает механизма, позволяющего отображать их в виде списка.

В ASP.NET есть много возможных решений для этого, но самым простым будет использование элемента управления ListView.

Трудно предоставить пример кода, не зная, как выглядят ваши данные, но давайте предположим, что у вас есть класс с именем Block:

public class Block
{
    public string Title {get; set;}
    public string Text { get; set; }
}

Чтобы отобразить один блок, вы должны создать пользовательский элемент управления, назовем его BlockControl:

Markup:

<div style="margin:10px; padding:10px; background:#eee;">
    <h2><%= Block.Title %></h2>
    <%= Block.Text %>
</div>

Код-за:

public partial class BlockControl : System.Web.UI.UserControl
{
    //Note the public property, we'll use this to data bind the ListView's item to the user control
    public Block Block { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
    }
}

Затем на своей странице .aspx вы можете объявить элемент управления ASP.NET ListView и использовать BlockControl в ItemTemplate ListView для представления данных. Обратите внимание, как мы привязываем текущий элемент данных ListView к свойству BlockControl.Block.

<asp:ListView ID="BlockList" runat="server">
    <ItemTemplate>
        <uc:BlockControl Block="<%# Container.DataItem %>" runat="server" />
    </ItemTemplate>
</asp:ListView>            

Из кода .aspx вы устанавливаете источник данных ListView. В вашем случае данные, вероятно, поступают из базы данных, но здесь это всего лишь фиктивные данные:

protected void Page_Load(object sender, EventArgs e)
{
    List<Block> blocks = new List<Block>
    {
        new Block { Title = "Block1", Text="This is the block 1 content"},
        new Block { Title = "Block2", Text="This is the block 2 content"}
    };

    this.BlockList.DataSource = blocks;
    this.BlockList.DataBind();
}

Теперь у вас есть представление одного блока, инкапсулированного в пользовательский элемент управления, и ListView предоставляет вам механизм для отображения переменного числа этих пользовательских элементов управления на основе ваших данных.

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