Как установить текст метки внутри пользовательского элемента управления - PullRequest
0 голосов
/ 13 апреля 2009

У меня есть пользовательский элемент управления, который отображает список категорий. В этом пользовательском элементе управления есть элемент управления Label, в который я хотел бы записать код из файла. Это мой ярлык

Я пробовал этот код:

Label lblCount = (Label)this.Page.FindControl("Label1");
lblCount.text = "some text";

Как я могу получить доступ к записи на этикетке из пользовательского кода управления за страницей? Какой код мне нужен. Я продолжаю получать эту ошибку: Ссылка на объект не установлена ​​на экземпляр объекта.

Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

1 голос
/ 13 апреля 2009

Я обычно так делаю

<asp:Label ID="Label1" runat="server" Text='<%# GetAmount() %>'></asp:Label>

затем используйте такой метод в коде.

protected string GetAmount()
{
    return "some text";
}

Метод GetAmount () будет вызываться для каждой строки на странице. Вы можете передавать параметры из базы данных, используя Eval ("ColumnName"), если они вам нужны.

0 голосов
/ 19 апреля 2009

Причина, по которой вы получаете эту ошибку, в том, что вы пытаетесь установить значение слишком рано в жизненном цикле страницы. На Page_Load ListView еще не сделал свои элементы, поэтому вы не можете получить к ним доступ.

Для элементов управления, которые используют шаблоны, ListViews, Repeaters и т. Д. Я использую событие «OnItemCreated» - оно срабатывает для каждого созданного элемента, и у вас есть доступ ко всем видам вещей.

Так что используйте следующее:

<asp:ListView ID="lvHomePageLinks" OnItemCreated="ListItems_Created" runat="server">

Тогда в вашем коде:

protected void ListItems_Created(object sender, ListViewItemEventArgs e)
{
    ((Label) e.Item.FindControl("Label1")).Text = "some text";
}
0 голосов
/ 13 апреля 2009

Вот мой полный пользовательский код ascx управления:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="homepagelinks.ascx.cs" Inherits="Controls_homepagelinks" EnableViewState="false" %>
 <div class="browseheaderbox">
        <asp:Image ID="Image3" runat="server" ImageUrl="~/App_Themes/TLP/images/icons/search_main.gif"
            AlternateText="Browse Business Categories" Width="34px" Height="31px" Style="float: left;" />
        <h2 class="pad0">
            Browse Business Categories</h2>
    </div>
 <asp:ListView ID="lvHomePageLinks" runat="server">
    <LayoutTemplate>
        <div id="homepagelinks">
            <asp:PlaceHolder ID="itemPlaceholder" runat="server" />
            <div class="clearer">&nbsp;</div>
        </div>
    </LayoutTemplate>
    <ItemTemplate>
        <div class="linkcatsHome">
            <h5>
            <asp:Image ID="Image1" runat="server" ImageUrl="~/App_Themes/TLP/images/icons/icon_alltrades.png" AlternateText='<%# Eval("txtCategory") %>' />
            <%# String.Format("<a href=\"directory/{0}.aspx\">{1}</a>", Eval("txtCategoryURL").ToString(), g.CapitalizeWords(Eval("txtCategory").ToString()))%></h5>
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

            <%# GetHomePageSubCats(Convert.ToInt32(Eval("intCategoryID")), Convert.ToInt32(g.homepagesubcatamount))%>
        </div>
    </ItemTemplate>
    <EmptyDataTemplate>
        Sorry No Data To Display
    </EmptyDataTemplate>
    </asp:ListView>

вот код файла benhid:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;
using System.Text;


public partial class Controls_homepagelinks : System.Web.UI.UserControl
{
    public CategoryBLL CategoryBLL = new CategoryBLL();
    public ListingBLL ListingBLL = new ListingBLL();
    public general g = new general();

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            SqlDataReader reader;
            reader = CategoryBLL.GetRandomCategories_dr();

            Label lbl = (Label)this.Page.FindControl("Label1");
            lbl.Text = "some text";

            lvHomePageLinks.DataSource = reader;
            lvHomePageLinks.DataBind();
            reader.Close();
            reader.Dispose();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...