C# 如何以编程方式向contentPlaceHolder添加内容?

C# 如何以编程方式向contentPlaceHolder添加内容?,c#,asp.net,master-pages,contentplaceholder,C#,Asp.net,Master Pages,Contentplaceholder,我有一个母版页,我的所有页面都继承了它。 对于格式,我想将不同页面的内容放在ContentPlaceHolder中 现在,我怎样才能把所有的东西都插进去呢?因为我计划用数据库中的东西填充ContentPlaceHolder,所以我想我必须以编程的方式来完成 如何向ContentPlaceHolder添加控件? 我检查了other,但无法通过其ID访问它 我应该从一开始就使用多个内容占位符吗?假设我想放电影。是否应该只有一个包含所有图片、描述和评级,或者每个内容都有一个占位符 我对其他解决方案持开

我有一个母版页,我的所有页面都继承了它。 对于格式,我想将不同页面的内容放在ContentPlaceHolder中

现在,我怎样才能把所有的东西都插进去呢?因为我计划用数据库中的东西填充ContentPlaceHolder,所以我想我必须以编程的方式来完成

  • 如何向ContentPlaceHolder添加控件? 我检查了other,但无法通过其ID访问它

  • 我应该从一开始就使用多个内容占位符吗?假设我想放电影。是否应该只有一个包含所有图片、描述和评级,或者每个内容都有一个占位符


  • 我对其他解决方案持开放态度,因为我没有ASP方面的经验。

    通常发生的情况是

  • 您可以使用正确的html和
    ContentPlaceHolder
    s设置母版页
  • 您可以基于该母版页创建页面。如果您使用Visual Studio,并告诉它基于现有母版页创建新页面,它将为您添加
    内容
    区域
  • 您可以在新创建的页面的内容区域中添加内容
  • 如果要向母版(或任何)页动态添加控件,可以向任何现有控件添加控件。如果它不应该以任何方式包装,只需添加一个
    占位符(它是一个asp.net控件)。

    我喜欢这样做

    <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
    <asp:Literal ID="jsstuff" runat="server"></asp:Literal>
    </asp:Content>
    
    
    
    这就进入了代码背后:

    string stuff =  @"<script type=""text/javascript"">
                                            var searchBox = 0;
                                             var currentCountry = '';
                                             </script>";
                        jsstuff.Text = stuff;
    
    string stuff=@”
    var-searchBox=0;
    var currentCountry='';
    ";
    jsstuff.Text=stuff;
    
    老问题。。。但我刚刚遇到了这个问题,这是谷歌上不断出现的#1帖子,所以我想我会添加我的答案,因为其他人在我的案例中不起作用


    如果内容页和母版页的名称空间不相同,那么内容页控件在内容页的Codebehind中不可访问,那么我就是这样做的


    此外,请检查设计器文件。如果该控件未列在designer文件中,请删除该文件并重新创建(project->convert to web application)

    很抱歉,这并不能真正解决我的问题。我需要一些代码以编程方式将文本放入内容区域,因为我无法从网页后面的代码访问它。我有default.aspx页面和ID=content1的ContentPlaceHolder。在default.aspx.cs中,我无法“看到”内容1.我看到了。是否有任何原因导致您无法在页面的
    内容
    区域中放置占位符?您当然可以添加一些内容:例如:
    Label lbl=new Label();lbl.Text=“某物”;占位符.控件.添加(lbl)否,我可以使用占位符。我想那没关系。但现在我意识到我的问题远比这复杂。我应该问另一个问题吗?我想根据我的QueryLink在该区域集成不同的内容。类似于在PHP中使用导入。例如,如果我有?category=1,那么该区域将是类别描述和产品,或者,如果我有?product=xx,那么该区域将显示图像、描述和价格。最简单的方法是什么?我会尝试将要在其中显示的内容类型分离为单独的用户控件,然后根据需要动态加载适当的控件(例如,页面的
    page\u Init
    method,
    var control=page.LoadControl(“~/path/to/theneedUserControl.ascx”);
    然后设置控件并将其添加到占位符的
    控件
    集合),但这可能会有点麻烦,具体取决于项目的设置方式。可能更容易的是,只需要有单独的页面,每个页面都做它需要做的事情,然后将它们写入IIS7中相同的基本Url(如果使用)。你有很多选择。这非常有效。它甚至可以扩展为包含占位符名称的控制参数。当我需要以编程方式将javascript文件放置在特定的序列/位置,而不是头部时,我使用了这个解决方案。
    <asp:ContentPlaceHolder ID="ScriptsPlace" runat="server"></asp:ContentPlaceHolder>
    
    protected void Page_Load(object sender, EventArgs e)
    {
        ContentPlaceHolder c = Page.Master.FindControl("ScriptsPlace") as ContentPlaceHolder;
        if (c != null)
        {
            LiteralControl l = new LiteralControl();
            l.Text="<script type=\"text/javascript\">$(document).ready(function () {js stuff;});</script>";
            c.Controls.Add(l);
        }
    }
    
    <div id="_jsDiv" runat="server">
        $(document).ready(function() {
             //js stuff
        });
        Other server controls or HTML junk
    </div>
    
    protected void Page_Load(object sender, EventArgs e)
    {
        ContentPlaceHolder c = Page.Master.FindControl("ScriptsPlace") as ContentPlaceHolder;
        HtmlGenericCOntrol jsDiv = this.FindControl("_jsDiv") as HtmlGenericControl;
        if (c != null && jsDiv != null)
        {
            c.Controls.Add(jsDiv);
        }
    }