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