ASP.net基本帮助ASCX用户控制

时间:2011-01-28 11:28:16

标签: c# 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!";
        }

    }
}

这样使用时显示正常:

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

除了“LOL!”没有显示。我可能错误地使用了属性等等,我希望很清楚我正在尝试做什么?

3 个答案:

答案 0 :(得分:1)

我试过你的例子,但它一切正常,我确实得到了哈哈!在字面上。 如果你调试代码,并在检查Tabgroup ==“ArtWork”时设置一个braekpoint,你可以检查TabGroup的值,也许它还没有设置?

答案 1 :(得分:1)

您的控件编码正确且工作正常。我怀疑你没有看到LOL的原因!文本是由于HTML或CSS中的某些内容掩盖了它。例如,您可能在其中一个标签上有display:none。尝试查看页面源并查看LOL!文字在里面 - 我打赌它是。

答案 2 :(得分: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);
}