-1

如何将页面、样式表或指向它们的链接自动包含到我的 ASP VBscript 页面中?我读过一些关于“全球”页面的内容,但我不确定它们的含义以及我如何能够完成这样的事情。我确信这是一个简单的问题,但它对我有很大帮助,因为我已经写了 2 天的 VBscript!总的来说,我也不是 HTML 方面的专家,但我觉得我对事物的掌握相当好。我希望有一个很好的详细示例,说明“全局”页面如何与我的其他 ASP 页面一起使用。

我正在设置我的第一个站点...我打算以后构建的主站点的管理站点。在继续使用公共站点之前,我想把我所有的鸭子排成一排。有人可以给我一些关于如何在我的网站中自动包含这些页面/链接的详细信息(页面包括(页眉/页脚)、样式表等),而无需在<!--#include file....我制作的每个页面上使用,因为那是种痛苦,我相信有一个更简单的方法。如果有,我知道你可以帮忙!在此先感谢,我期待听到可用的选项/可能性。

4

2 回答 2

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 或资源。

然后各个页面只是占位符中的内容。

于 2012-10-28T10:17:32.600 回答
0

如果您坚持使用 ASP Classic,您可能会找到一些方法来处理类似功能的母版页,但据我所知,框架并不支持这种方法。

[编辑] 鉴于对原始问题的编辑,首先演示的方法并不那么有趣,因此我也建议另一种方法。

您可以制作一个通用的 ASP 页面,为网站的所有流量提供服务。然后一个查询参数指定应该显示哪个子页面。子页面被制成单独的 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 查询参数进行一些解释,以更智能的方式重定向输入。

另一个问题是子页面本身就是 ASP 页面,这意味着有人可以直接引用它们。这需要采取一些措施来保护这些子页面不被直接引用。可以做到,但这可能意味着包含一些代码 => 回到原点!

这种方法的另一个缺点是子页面在它们自己的上下文中呈现,因此无法从调用页面的上下文中访问功能和数据。这意味着必须以其他方式(会话、应用程序、数据库或其他方式)共享全局数据。数据也不能传递到子页面(不,Server.Execute 不允许查询参数)。

包含方式

就我个人而言,我认为您可以通过使用页眉/页脚包含来获得最大的灵活性,如我的原始帖子中所示,如下所示。

一种方法是将您的一般内容放入包含中,然后在每个 ASP 页面上包含这些位。例如:

<!-- #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 带来一些问题;一方面,标题应该适合页面内容,这在包含包含标题标记时很难完成。这可以通过在包含部分之前设置的一些全局变量来促进,即:

<%
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>

但这已经开始有点“味道”了,因为您为包含文件中的包含页面设置了一些期望。至少在构建页面时您必须非常自律。

于 2012-10-28T11:28:12.623 回答