为什么我的ASP.NET webforms控件不能呈现?

问题描述:

我有一种感觉,我错过了一件小事。我有非常简单的页面,从VS2010中的ASP.NET模板创建。我的Default.aspx只包含以下代码。 Site.Master页面正在做它应该做的事情。为什么我的ASP.NET webforms控件不能呈现?

<%@Page 
    Title="Home Page" 
    Language="C#" 
    MasterPageFile="~/Site.master" 
    AutoEventWireup="true" 
    CodeBehind="Default.aspx.cs" 
    Inherits="UserControlTest._Default" %> 

<%@Register 
    TagPrefix="tsi" 
    Namespace="UserControlTest.Controls" 
    Assembly="UserControlTest" %> 

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"></asp:Content> 

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> 

    <!-- HERE BE DRAGONS --> 
    <tsi:BigHelloBanner runat="server" /> 
    <tsi:SmallHelloBanner runat="server" /> 

</asp:Content> 

BigHelloBanner包含此:

<%@Control 
    Language="C#" 
    AutoEventWireup="true" 
    Visible="true" 
    CodeBehind="BigHelloBanner.ascx.cs" 
    Inherits="UserControlTest.Controls.BigHelloBanner" %> 

<h1>HI!</h1> 

无论在这两个对象的代码隐藏文件是空的,并且从UserControl继承。行为与从Control继承的行为相同。当我在呈现的输出上查看源代码时,除了一些换行符外,不会输出HelloBanners中的任何内容。这里的DRAGONS评论是可见的,这表明主页和所有的工作正常。我期待在输出中看到<h1>HI!</h1>标记。我错过了什么?这看起来很基本。

它看起来像您提到的空代码隐藏类,而不是ASCX文件与输出。使用src属性,在@Register指令:

<%@Register 
    TagPrefix="tsi" 
    TagName="BigHelloBanner" 
    Src="BigHelloBanner.ascx" %> 
+0

这回答了我的主要问题,但我认为这将导致如何在运行时更改控件的后续工作。我会看到我无法弄清的。 –

难道你还需要给每个控件实例一个ID吗?

+0

的ID似乎是自动生成的,如果我不手动添加一个。 –

我在这里看不到src属性,你的控件在哪里?

<%@Register 
    TagPrefix="tsi" 
    Namespace="UserControlTest.Controls" 
    Assembly="UserControlTest" 
    src="?" %> 

由于BigHelloBanner是一个Web用户控件,你应该尝试这样注册它:

<%@Register TagPrefix="tsi" TagName="BigHelloBanner" Src="~/pathToUserControls/BigHelloBanner.ascx" %>