【问题标题】:ASP.Net controls appear on page, but not in a user control on that pageASP.Net 控件出现在页面上,但不在该页面上的用户控件中
【发布时间】:2009-02-24 19:23:47
【问题描述】:

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

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

程序集在 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" />

【问题讨论】:

  • 你能发布一些示例代码吗?
  • 编辑您的问题并在您添加自定义控件的地方添加一些代码,然后我们可以为您提供帮助。
  • 既然你在渲染中得到了东西,我会假设这只是一个“示例错误”,但你没有在页面代码中引用你的控件。
  • 我在 web config 中注册了程序集

标签: asp.net


【解决方案1】:

如果你像这样在页面顶部注册控件

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

(这里的重点是 Src="..." 部分)

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-19
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 2011-10-13
        • 2013-01-05
        • 1970-01-01
        相关资源
        最近更新 更多