ASP.Net控件显示在页面上,但不在该页面上的用户控件中

时间:2009-02-24 19:23:48

标签: asp.net

我正在使用ASP.Net Web应用程序项目。我有一个用户控件,里面有一个asp.net按钮。当我在页面上使用该用户控件时,该按钮不会出现,但如果我将按钮直接放在页面上,则按钮会显示。知道问题是什么吗?

此外,在该用户控件中,我可以覆盖render方法,并且传递给render方法的测试可以工作,但我仍然没有得到按钮

程序集已在web.config中注册

编辑:在dave的帖子之后,我发现放在.ascx文件中的任何内容都不起作用,而覆盖用户控件的渲染方法是有效的

页面

<%@ Page Title="Home" Language="C#" MasterPageFile="~/Master.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Site.Default" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <div>
        <uc:SomeCustomControl ID="myControl" runat="server" />
        <asp:Button runat="server" Text="outControl" />
    </div>
</asp:Content>

控件.ascx文件

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestControl.ascx.cs" Inherits="Site.Controls.TestControl" %>
    <asp:Button runat="server" Text="InControl" /><!--cant see this button-->
    <p>I can't see this</p><!--cant see this text-->

.ascx文件背后的代码

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

namespace Site.Controls
{
    public partial class TestControl : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        protected override void Render(HtmlTextWriter writer)
        {
            writer.Write("I can see this");
            base.Render(writer);
        }

    }
}    

和页面来源

        I can see this
        <input type="submit" name="ctl00$ContentPlaceHolder1$Button1" value="outControl" id="ctl00_ContentPlaceHolder1_Button1" />

3 个答案:

答案 0 :(得分:3)

如果您将控件注册在页面顶部,就像这样

<%@ Register TagPrefix="uc" TagName="SomeCustomControl" Src="~/PathTo/TestControl.ascx" %>

(这里的关键点是Src =“......”部分)

然后TestControl.ascx中的标记和控件将可见且可用。如果你只在web.config中指定控件的命名空间&lt; pages&gt;指令(或在页面顶部)然后只使用代码隐藏,并忽略代码前端(.ascx)中的任何标记

答案 1 :(得分:0)

用户控件中是否有任何代码影响按钮的可见性?

是否显示用户控件的其余部分,或者仅包含按钮?如果它只是一个按钮,则整个用户控件可能无法正确呈现。将一些文本添加到用户控件作为测试,以确保它只是不起作用的按钮,而不是整个用户控件。

您还可以尝试启用页面跟踪。用户控件和按钮应显示在控件层次结构列表中。如果他们不这样做,那么其中一个或两个都没有正确呈现。

答案 2 :(得分:0)

此页面和控件是否在标准默认应用程序中? web.config或machine.config是否有可能对您的UserControl产生一些影响?也许是一个HttpModule?

除了从“默认”网站设置进行检查之外,您可能还需要进行一些调试并检查对象的属性。您可以在渲染方法中进行写入。也许看看渲染时用户控件中有多少控件。 (可能正在删除或清除控件容器)。