2011-01-28 43 views
1

試圖建立自己的用戶控件:ASP.net與ASCX用戶控件的基本幫助

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="TabMenu.ascx.cs" Inherits="TabMenu" %> 

<asp:Panel runat="server" CssClass="tabWrapper"> 
     <div class="tab tabSelected"><a href="artworkHome.aspx">Home</a></div> 
     <div class="tab"><a href="#">Create New</a></div> 
     <div class="tab"><a href="#">Help!</a></div> 
     <div class="clear"></div> 
     <asp:Literal runat="server" ID="lol"></asp:Literal> 
</asp:Panel> 

using System; 
using System.Collections.Generic; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class TabMenu : System.Web.UI.UserControl 
{ 
    public string TabGroup { get; set; } 

    protected void Page_Load(object sender, EventArgs e) 
    { 

     if (this.TabGroup == "Artwork") 
     { 
      lol.Text = "LOL!"; 
     } 

    } 
} 

這如此使用時,顯示精細:「LOL」

<CrystalControls:TabMenu runat="server" TabGroup="Artwork" /> 

除沒有顯示。我可能使用不正確的屬性等,我希望這是明確的我想要做什麼?

+0

位於「lol」ID的文字在哪裏?在您的用戶控件或.aspx頁面中,控件已放置在? – 2011-01-28 11:35:27

+0

@Dan文字在上面的代碼中,位於TabMenu.ascx文件中。即使我刪除了條件,如果我在ascx文件的代碼隱藏中設置了文本,它也不會顯示任何內容。 – 2011-01-28 11:36:31

回答

1

我試過你的例子,但它的一切正常,我確實得到了LOL!在字面上。 如果您調試了代碼,並在檢查Tabgroup ==「ArtWork」時設置檢查點,您可以檢查TabGroup的值,也許它尚未設置?

0

你的問題是Page_Load不是一個自動爲用戶控件連接的事件,請參閱autoeventwireup,我個人討厭訂閱我自己的事件,無論如何你應該覆蓋所提供的虛擬方法..

嘗試......

protected override void OnLoad(EventArgs e) 
{  
    if (this.TabGroup == "Artwork")   
    {    
     lol.Text = "LOL!";   
    } 
    base.OnLoad(e); 
} 

,甚至這一點,如果它可能是控制用戶可以在頁面生命週期過程中改變TabGroup ..

protected override void OnPreRender(EventArgs e) 
{  
    if (this.TabGroup == "Artwork")   
    {    
     lol.Text = "LOL!";   
    } 
    base.OnPreRender(e); 
} 
+0

我已經把覆蓋,但它仍然沒有渲染任何東西在控制 – 2011-01-28 11:40:14

1

您的控件編碼正確,工作正常。我懷疑你沒有看到LOL的原因!文字是由於您的HTML或CSS中的某些內容遮住了它。例如,您的某個標籤上可能有display:none。嘗試查看頁面源代碼並查看是否有LOL!文本在裏面 - 我敢打賭。