2009-04-13 95 views
0

我有一個顯示類別列表的用戶控件。在那個用戶控件中,我有一個Label控件,我想從代碼隱藏文件中寫入。這是我的標籤如何在用戶控件中設置標籤的文本

我曾嘗試這樣的代碼:

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

我如何才能訪問寫入從頁面背後的用戶控件代碼的標籤?我需要什麼代碼。我不斷收到此錯誤:對象引用未設置爲對象的實例。

任何幫助將不勝感激。

回答

1

我通常不喜歡這樣

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

然後有一個方法在後面的代碼中是這樣的。

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

將爲頁面中的每一行調用GetAmount()方法。如果需要,可以使用Eval(「ColumnName」)從數據傳遞參數傳遞參數。

+0

真棒AI W,這真是棒極了。我不認爲在用戶控件中寫入標籤會很麻煩。謝謝。 – Jason 2009-04-13 03:14:31

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">&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(); 
     } 
    } 
} 
0

你得到這個錯誤的原因是因爲你試圖在頁面生命週期爲時尚早設置的值。在Page_Load中,ListView還沒有製作它的項目,所以你無法找到它們。

對於使用模板,列表視圖,中繼器等我用的是「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"; 
} 
相關問題