我有一个显示类别列表的用户控件。在该用户控件中,我有一个Label控件,我想从代码隐藏文件中写入。这是我的标签
我试过这段代码:
Label lblCount = (Label)this.Page.FindControl("Label1");
lblCount.text = "some text";
如何从页面后面的用户控制代码访问标签?我需要什么代码。我不断收到此错误:对象引用未设置为对象的实例。
非常感谢任何帮助。
答案 0 :(得分:1)
我通常这样做
<asp:Label ID="Label1" runat="server" Text='<%# GetAmount() %>'></asp:Label>
然后在后面的代码中有这样的方法。
protected string GetAmount()
{
return "some text";
}
将为页面中的每一行调用GetAmount()方法。如果需要,可以使用Eval(“ColumnName”)从数据中传递参数。
答案 1 :(得分:0)
这是我的完整用户控件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"> </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();
}
}
}
答案 2 :(得分:0)
您收到该错误的原因是您尝试在页面生命周期中过早设置该值。在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";
}