如何以编程方式将内容添加到contentPlaceHolder?
我有一个母版页,我的所有页面都inheritance了它。 对于格式化,我想在ContentPlaceHolder中放置不同页面的内容。
现在,我该如何插入所有内容? 由于我打算用数据库中的东西填充ContentPlaceHolder,我想我必须以编程方式进行填充。
-
如何向ContentPlace Holder添加控件? 我检查了其他答案 ,但我无法通过其ID访问它。
-
我应该从开始使用多个ContentPlaceHolders吗? 假设我想放电影。 如果只有一个包含所有图像,描述和评级,那么每个东西都要有一个ContentPlaceHolder吗?
我对其他解决方案持开放态度,因为我没有使用ASP的经验。
老问题……但是我刚刚遇到了这个问题,这是第一个一直在Google上发布的post,所以我想补充一下我的答案,因为其他人在我的案例中没有用。
这是我在常规
MasterPage有这个ContentPlaceHolder
:
必须从用户控件动态添加一些JavaScript。 尝试直接使用ContentPlaceHolder
会出现此错误:
分析器错误消息:内容控件必须是内容页面中的顶级控件或引用母版页的嵌套母版页。
所以我想从代码隐藏中添加脚本。 这是.ascx
文件的页面加载:
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=""; c.Controls.Add(l); } }
更新:事实certificate,我必须在比预期更多的地方使用它,并最终使用更灵活/可读的方式。 在用户控件本身,我只是包装了javascript以及需要使用常规div
移动的任何其他内容。
$(document).ready(function() { //js stuff }); Other server controls or HTML junk
然后后面的代码将找到div,然后将其移动到ContentPlaceHolder
。
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); } }
我实际上把这个代码放在一个自定义用户控件中,我只是让我的常规用户控件inheritance自定义用户控件,所以一旦我用
包装javascript / etc,自定义用户控件负责其余部分,我不必在用户控件后面的代码中做任何事情。
通常发生的是
- 使用正确的html和
ContentPlaceHolder
设置母版页 - 您可以根据该母版页创建页面。 如果您使用Visual Studio,并告诉它基于现有母版页创建新页面,它将为您添加
Content
区域。 - 您将内容添加到新创建的页面中的内容区域。
如果要将控件动态添加到主(或任何)页面,可以向任何现有控件添加控件。 如果它不应该以任何方式包装,只需添加一个Placeholder
(它是一个asp.net控件)。
我确实喜欢这个
这进入了代码背后:
string stuff = @""; jsstuff.Text = stuff;
如果内容页面和母版页面的名称空间不相同,则内容页面控件无法在内容页面中的Codebehind中访问。
另外,检查您的设计器文件。 如果控件未在设计器文件中列出,则删除该文件并重新创建(project-> convert to web application)