【问题标题】:asp.net usercontrols and nested tagsasp.net 用户控件和嵌套标签
【发布时间】:2011-08-15 14:29:52
【问题描述】:

我们如何创建由嵌套标签组成的 UserControl:

    <uc:MyPanel>
       <header>
           title here...
       </header>

       <content>
           content here...
       </content>
    </uc:MyPanel>

【问题讨论】:

  • 你到底是什么意思?你能详细说明一下吗?
  • 我有一个带有强制布局的面板,为了避免复制/过去面板的代码,我决定创建自定义控件,它将有子标签来保存面板的标题和内容

标签: c# asp.net user-controls


【解决方案1】:

要执行您想要的操作,您需要创建一个可以解释嵌套标签的自定义服务器控件。这将需要大量的工作。

您似乎正在尝试为您的网站创建布局。如果这是您想要做的事情,您最好使用母版页,并为页眉、页脚、内容等创建内容占位符。

【讨论】:

    【解决方案2】:

    我想我理解你在追求什么,因为我过去曾试图自己找到一种方法来做到这一点。我有一些复杂的 HTML,它生成了一个带有标题的框。每次我需要这个框时,我都希望我可以指定一个嵌套在里面的 header/content/whateverelse 标签,而不是复制 HTML。

    我找不到我原来的问题,但我记得那里并不是我想要的答案。

    最后我相信我被告知要查看 Custom Server Controls 而不是用户控件。

    希望对你有帮助

    【讨论】:

    【解决方案3】:

    这是我找到的解决方案,对于想要做同样事情的人来说

    popup.ascx

    <%@ Control Language="C#" AutoEventWireup="true" 
      CodeBehind="Popup.ascx.cs" Inherits="Dynamic.Popup" %>
    <div style="width: 400px; padding: 1px; border: 1px solid #BED6F8;
      background-color: #FFFFFF; position: absolute" runat="server" id="panel">
       <div style="padding: 1px 1px 2px 5px; height: 18px; border: 1px solid #BED6F8; cursor: move;
       background: -moz-linear-gradient(top, white,#BED6F8); background-color: #BED6F8"
       runat="server" id="titlePanel">
    
       <asp:Literal ID="ltTitre" runat="server"></asp:Literal>
    
       <div style="position: absolute; right: 3px; top: 3px; z-index: 100; cursor: pointer">
           <img src="close.png" alt="fermer" onclick="$find('popUpPanel').hide();" />
       </div>
    

    Popup.ascx.cs

     [ParseChildren(true)]
      public partial class Popup : System.Web.UI.UserControl
      {
       [TemplateContainer(typeof(MessageContainer))]
       [PersistenceMode(PersistenceMode.InnerProperty)]
       public ITemplate MessageTemplate { get; set; } 
    
       public string Text { get; set; }
    
      protected void Page_Init(object sender, EventArgs e)
      {
        ltTitre.Text = Text;
    
         if (MessageTemplate != null)
         {
            var i = new MessageContainer();
            MessageTemplate.InstantiateIn(i);
            PlaceHolder1.Controls.Add(i);
         }           
       }
    
         public class MessageContainer : Control, INamingContainer{ }
     }
    

    用户控件的使用

    <uc:Popup ID="p" runat="server" Text="Titre1">
        <MessageTemplate>
         <asp:LinkButton ID="LinkButton1" runat="server">LinkButton</asp:LinkButton>
           Test
        </MessageTemplate>
    </uc:Popup>
    

    【讨论】:

      【解决方案4】:

      我猜您正在寻找的是带有Content Place holder 的母版页。例如

       <div class="page">
          <div class="header">
              <div class="title">
                  <h1>
                      My ASP.NET Application
                  </h1>
              </div>            
          </div>
          <div class="main">
              <asp:ContentPlaceHolder ID="MainContent" runat="server"/>
          </div>
          <div class="clear">
          </div>
      </div>
      <div class="footer">
      
      </div>
      

      看看这个ASP.NET Master Pages Tutorials

      【讨论】:

      • 我正在尝试创建自定义 UserControl 女巫我可以在页面上重复使用
      猜你喜欢
      • 2023-04-02
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 2011-10-03
      • 2020-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多