我有一个项目(Web应用程序),我需要使用Web窗体实现.我已经为网站准备了设计,我将使用我已经开发的CSS模板之一.在这种情况下:
顺便说一句,CSS文件是一个准备好的模板.
可以从内容页面访问母版页的元素吗?
假设我有继承MasterPage1的MasterPage1和ContentPage1,MasterPage1有一个按钮:Button1.
我可以从内容页面更改该按钮的属性,例如使Button1不可见,不活动等吗?我怎么能做到这一点?
我正在使用.net2.0
我正在开发一个用ColdFusion编码的网站.我有一个CSS/HTML模板我想应用于每个页面的内容,而不需要复制任何超过必要的代码.我已经被ASP.NET的母版所破坏了,这将是我实现这个网站的首选方式.不幸的是,我无法使用该选项.这个网站必须在Coldfusion MX 7上运行.此外,领导该项目的开发人员不喜欢Fusebox,因此该选项已经完成.
每个页面上的主导航,图形页眉和页脚都是相同的.标题标签,元标记和二级导航可能因页面而异.除此之外,只有页面的"主要内容区域"会有所不同.
鉴于这些参数,我如何编码网站以获得最大的可维护性?
这两种情况之间是否存在差异:
(1)从普通孩子访问母版页上的属性
(2)从嵌套母版页访问母版页上的属性
我试图从内容页面访问母版页中的文本框,如下所示:
TextBox a;
a = (TextBox)Master.FindControl("ayyash"); // Master is declared in MasterType directive
defaultTextbox.Text = a.Text; // defaultTextBox is a textbox control inside default.aspx
Run Code Online (Sandbox Code Playgroud)
它可以工作,但是当我在嵌套的母版页上应用相同的方法时:
TextBox a;
a = (TextBox)Master.FindControl("ayyash"); // Master is declared in MasterType directive
myTextBox.Text = a.Text; // myTextBox is a textbox control inside child.master
Run Code Online (Sandbox Code Playgroud)
这不起作用,我错过了什么吗?我在resumere page_load处理程序中调用这两个代码...
我也注意到我无法在代码后面的嵌套母版页中设置文本框值,肯定有一些东西我不见了,它是什么?为了阐明这个问题,这里有一个例子:
嵌套母版页:
<%@ Master Language="C#" MasterPageFile="MasterPage.master" AutoEventWireup="false" CodeFile="MasterPage2.master.cs" Inherits="MasterPage2" %>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:textbox id="tx2" runat="server" text="this is two"></asp:textbox>
<asp:contentplaceholder id="newstuff" runat="server"></asp:contentplaceholder>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
代码背后:
Response.Wrote(tx2.Text);
Run Code Online (Sandbox Code Playgroud)
我没有,为什么我错过了什么?请注意,我也尝试了递归查找控件: …
当内容占位符包含任何代码块时,它会报告控件集合为空.
例如:
MasterPage.aspx
<asp:ContentPlaceHolder ID="Content1" runat="server" />
<asp:ContentPlaceHolder ID="Content2" runat="server" />
<div>Content1: <%= Content1.Controls.Count %></div>
<div>Content2: <%= Content2.Controls.Count %></div>
Run Code Online (Sandbox Code Playgroud)
APage.aspx
<asp:Content ContentPlaceHolderID="Content1" runat="server">
Plain text content.
</asp:Content>
<asp:Content ContentPlaceHolderID="Content2" runat="server">
<%= "Code block content." %>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
这将呈现以下内容:
纯文本内容.代码块内容.
内容1:1
内容2:0
为什么母版页的ContentPlaceHolder.Controls集合为空?
我想检查是否已填充ContentPlaceHolder(另请参阅此问题)但如果它包含任何<%=块则不能.
有没有人知道这方面的方法?
我在我的ASP.net应用程序中使用母版页,在母版页中我将ContentPlaceHolder放在更新面板中以支持子页面中的AJAX,问题是如何在页面之间导航时停止刷新"母版页控件"?
为了在页面之间导航我尝试使用Response.Redirect,windows.location java脚本没有成功,我是否应该使用Frames或IFrame而不是Master Pages来停止刷新?
任何解决此问题的建议都将受到高度赞赏,在此先感谢...
我在我的ASP.NET网站上使用母版页,在我上传文件的一个内容页面中,需要比默认值90秒更长的超时值.对于其他内容页面,我想保留默认的超时值.
是否可以为特定内容页面设置超时?我检查了ScriptManagerProxy组件,但它没有AsyncPostBackTimeout属性.
我一直在网上搜索而没有找到任何答案(关于堆栈溢出有几个接近的问题,但它们似乎没有得到答案或相同),所以我认为我会构成我自己的一个.它围绕嵌套母版页和访问祖父母大师的Content PlaceHolder的内容页面展开,即使它没有在父嵌套母版中重新公开.我想知道这是不可能的.
Core Site.Master
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>
<asp:ContentPlaceHolder ID="TitleContent" runat="server">
<%= Html.GlobalModel().PageTitle %>
</asp:ContentPlaceHolder>
</title>
<asp:ContentPlaceHolder ID="HeadContent" runat="server">
<link rel="shortcut icon"
href="<%= ViewContext.ClientContent( "Content/Tiki.ico" ) %>"
type="image/x-icon"/>
</asp:ContentPlaceHolder>
</head>
<body>
<asp:ContentPlaceHolder ID="SiteContent" runat="server"/>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
嵌套的Site.Master(请注意TitleContent和HeadContent是如何自定义的,因此来自Core Site.Master的'默认'内容应该生效)
<%@ Master Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewMasterPage" %>
<asp:Content ContentPlaceHolderID="SiteContent" runat="server">
<asp:ContentPlaceHolder ID="SiteContent" runat="server">
<h1>Nested Header</h1>
<asp:ContentPlaceHolder ID="NestedContent" runat="server"/>
</asp:ContentPlaceHolder>
</asp:ContentPlaceHolder>
Run Code Online (Sandbox Code Playgroud)
ContentView.aspx(引用嵌套的Site.Master,尝试的TitleContent替换将不起作用.)
<%@ Page Language="C#" MasterPageFile="Site.Master" %>
<asp:Content ContentPlaceHolderID="NestedContent" runat="server">
<p>Nested content. This will work.</p>
</asp:Content>
<asp:Content ContentPlaceHolderID="TitleContent" runat="server"> …Run Code Online (Sandbox Code Playgroud) 我有一个母版页,我的所有页面都继承了它.对于格式化,我想在ContentPlaceHolder中放置不同页面的内容.
现在,我怎么能插入一切呢?由于我打算用数据库中的东西填充ContentPlaceHolder,我想我必须以编程方式进行填充.
如何向ContentPlace Holder添加控件?我检查了其他答案,但我无法通过其ID访问它.
我应该从一开始就使用多个ContentPlaceHolders吗?假设我想放电影.如果只有一个包含所有图像,描述和评级,每个东西都要有一个ContentPlaceHolder吗?
我对其他解决方案持开放态度,因为我没有使用ASP的经验.
我们有一个现有的ASP.Net Web应用程序,我们希望将其转换为使用masterpages.在这样做的过程中,我发现为HTML元素生成的HTML id以ContentPlaceHolder的id为前缀.当我们设置ContentPlaceHolder的clientidmode = static时,这是可以预期的.既然我们有很多现有的客户端脚本都使用了id,那么当我们使用masterpages时,这个部分就会中断,而且运行我们所有的javascript以确保我们使用Control.ClientID来调用javascript是一项非常大的工作. ,因为很多都是硬编码的.
有没有办法禁用前缀?我可以成功做到这一点,如果我创建其ClientIdMode = static的每个控件设置,但是我再次优先设置此设置,以确保所有控件都具有其ClientIdMode = static.那可能吗?或者是否可以覆盖ContentPlaceHolder的NamingContainer?
该平台是.Net 4.0
(在下面的答案中描述的web.config中修复ClientIdMode = static的上述问题后),我遇到了"name"属性自动生成的问题,并且没有设置为我介绍之前的任何内容masterpages.这给我一个现有服务器代码的问题,它有许多Request.Form [].知道什么是最佳实践来解决这个问题吗?
谢谢圣战
master-pages ×10
asp.net ×9
nested ×2
.net ×1
ajax ×1
asp.net-ajax ×1
asp.net-mvc ×1
c# ×1
code-reuse ×1
coldfusion ×1
css ×1
timeout ×1
webforms ×1