如何将页面,样式表或链接自动包含在我的ASP VBscript页面中?我读过一些关于“全球”页面的内容,但我不确定它们的含义以及我是如何完成这样的事情的。我确信这是一个简单的问题,但对我来说非常有帮助,因为我已经写了2天的VBscript了!我也不是一般的HTML专家,但我觉得我对事情有了很好的掌握。我将非常感谢“全局”页面如何与我的其他ASP页面一起播放的详细示例。
我正在建立我的第一个网站......我打算在之后构建的主网站的管理网站。在继续推进公共网站之前,我想连接所有的鸭子。有人可以给我一些关于如何在我的网站中自动包含这些页面/链接(页面包含(页眉/页脚),样式表等)的详细信息,而无需在我制作的每个页面上使用<!--#include file....
,因为那是一种痛苦,我相信有一种更简单的方法。如果有,我知道你可以帮忙!在此先感谢,我期待听到有哪些选择/可能性。
答案 0 :(得分:0)
您正在寻找的术语是Master Page,而不是Global Page,这可能就是为什么您很难找到您在Google上寻找的内容。基本上将主页面视为模板。您创建一个母版页,然后将其他页面加载到其中。您可以在主页中放置内容占位符,然后填充在其他页面上。
所以一个非常基本的例子看起来像这样。
<%@ Master Language="VB" CodeFile="general.master.vb" Inherits="master1_general"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<link rel="stylesheet" type="text/css" href="/styles/main.css?v2"/>
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<asp:ContentPlaceHolder id="body" runat="server">
</asp:ContentPlaceHolder>
</form>
</body>
</html>
然后您的各个页面将如下所示:
<%@ Page Language="VB" MasterPageFile="~/master/general.master" AutoEventWireup="false" CodeFile="base.aspx.vb" Inherits="_Default" title="Opportunities" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
//any additional head stuff specific to this page goes here.
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="body" Runat="Server" >
//your body mark up goes here.
</asp:Content>
注意母版页实际上是一个网页。然后它在某些地方有占位符。在这个中,头部有一个占位器,体内有一个占位器。然后在各个页面上,我确定要使用哪个母版页以及哪些数据(如果有)进入占位符。我总是在头部包含一个占位符,这样我就可以只在该页面上加载特定页面所需的js或资源。
然后单个页面就是占位符中的内容。
答案 1 :(得分:0)
如果您坚持使用ASP Classic,您可能会发现一些处理母版页功能的方法,但据我所知,这并不是框架所支持的。
[编辑]鉴于原始问题的编辑,首先演示的方法并不那么有趣,因此我建议采用另一种方法。
您可以制作一个通用的ASP页面,为该网站的所有流量提供服务。然后,queryparameter指定应显示哪个子页面。子页面是作为单独的ASP页面制作的,由通用/母版页或其他子页面执行。一个非常粗略的例子可能是这样的:
<%
url = Request.QueryString("url") & ""
if url = "/" or url = "" then
subpage = "home.asp"
else
subpage = url & ".asp"
end if
%>
<!DOCTYPE html>
<html>
<head>
<title>Header for all pages</title>
<link rel="stylesheet" href="/css/site.css" />
</head>
<body>
<% Server.Execute(subpage) %>
</body>
</html>
然后应该以这种方式处理该网站:
www.domain.com/default.asp?url=/contact
会将contact.asp子页面加载到母版页中,或者:
www.domain.com/default.asp?url=/user/1234/profile
加载用户的个人资料页面(由文件夹user / 1234中的profile.asp显示)。最后一个例子提出了一些问题,因为每个用户都必须有一个包含所有asp文件的文件夹(这远远不是最佳的),所以你可能想要使用url queryparameter的一些解释来以更智能的方式重定向输入。
另一个问题是子页面是ASP页面本身,这意味着有人可以直接引用它们。这要求采取一些措施来保护这些子页面不被直接引用。它可以完成,但这可能意味着包括一些代码=&gt;回到原点!
此方法的另一个缺点是子页面在其自己的上下文中呈现,因此无法从调用页面的上下文访问功能和数据。这意味着必须以其他方式(会话,应用程序,数据库或其他方式)共享全局数据。数据也不能传递给子页面(并且不,Server.Execute不允许查询参数)。
包含方式
我个人认为你通过使用标题/页脚包含得到最大的灵活性,如我原来的帖子所示,如下所示。
一种方法是将您的常规内容放入包含,然后在每个ASP页面上包含这些位。 E.g:
<!-- #include virtual="/includes/header.asp" -->
content goes here
<!-- #include virtual="/includes/footer.asp" -->
你的header.asp看起来像这样:
<!DOCTYPE html>
<html>
<head>
<title>Header for all pages</title>
<link rel="stylesheet" href="/css/site.css" />
</head>
<body>
和footer.asp一样:
</body>
</html>
这种策略有一些缺点。标题相当静态,这可能会给SEO带来一些问题;首先,标题应该适合pagecontent,当include包含header-markup时很难完成。这可以通过在包含部分之前设置的一些全局变量来促进,即:
<%
title = "Title for this page's content"
%>
<!-- #include virtual="/includes/header.asp" -->
content goes here
<!-- #include virtual="/includes/footer.asp" -->
然后在标题中如此
<!DOCTYPE html>
<html>
<head>
<title><%=title%></title>
<link rel="stylesheet" href="/css/site.css" />
</head>
<body>
但是已经开始“闻”了一点,因为你对include文件中的包含页面设置了一些期望。至少在构建页面时你必须非常自律。