Css 在asp vbscript的所有页面中包含样式表

Css 在asp vbscript的所有页面中包含样式表,css,asp-classic,vbscript,include,Css,Asp Classic,Vbscript,Include,如何将页面、样式表或其链接自动包含到ASP VBscript页面中?我读了一些关于“全球”页面的文章,但我不确定它们的意思是什么,以及我是如何做到这一点的。我相信这是一个简单的问题,但它对我帮助很大,因为我已经写了两天的VBscript了!一般来说,我也不是HTML方面的专家,但我觉得我对事物有相当好的掌握。如果能提供一个很好的详细示例,说明“全局”页面如何与我的其他ASP页面一起使用,我将不胜感激 我正在建立我的第一个网站…一个管理网站的主要网站,我打算建立之后。我想在进入公共网站之前把我所有

如何将页面、样式表或其链接自动包含到ASP VBscript页面中?我读了一些关于“全球”页面的文章,但我不确定它们的意思是什么,以及我是如何做到这一点的。我相信这是一个简单的问题,但它对我帮助很大,因为我已经写了两天的VBscript了!一般来说,我也不是HTML方面的专家,但我觉得我对事物有相当好的掌握。如果能提供一个很好的详细示例,说明“全局”页面如何与我的其他ASP页面一起使用,我将不胜感激


我正在建立我的第一个网站…一个管理网站的主要网站,我打算建立之后。我想在进入公共网站之前把我所有的鸭子排好。有没有人能给我一些详细的信息,告诉我如何在我的网站中自动全局包含这些页面/链接(页面包括(页眉/页脚)、样式表等),而无需使用
您要查找的术语是母版页,而不是全局页,这可能就是为什么你很难在谷歌上找到你想要的东西。基本上考虑母版页模板。创建母版页,然后将其他页加载到其中。有一些内容占位符,您可以将其放在母版中,然后填充到其他页面上

所以一个非常基本的例子应该是这样的

<%@ 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>
<%
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>
<!DOCTYPE html>
<html>
<head>
  <title>Header for all pages</title>
  <link rel="stylesheet" href="/css/site.css" />
</head>
<body>

//任何与此页面相关的附加标题都将显示在此处。
//你的身体标记在这里。
请注意母版页实际上是一个网页。然后在某些地方有占位符。在这张照片中,头部和身体各有一个占位符。然后在各个页面上,我确定要使用哪个母版页,以及哪些数据(如果有的话)放在占位符中。我总是在头部包含一个占位符,这样我就可以只在该页面上加载特定页面所需的js或资源


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

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

[Edit]鉴于对原始问题的编辑,第一次演示的方法不太有趣,因此我也建议使用另一种方法。

您可以创建一个通用的ASP页面,为站点的所有流量提供服务。然后,查询参数指定应显示的子页面。子页面作为单独的ASP页面,由常规/母版页或另一个子页面执行。这方面的一个非常粗糙的例子可能如下所示:

<%@ 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>
<%
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>
<!DOCTYPE html>
<html>
<head>
  <title>Header for all pages</title>
  <link rel="stylesheet" href="/css/site.css" />
</head>
<body>
这将把contact.asp子页面加载到母版页中,或者:

www.domain.com/default.asp?url=/user/1234/profile 
加载用户的profile页面(由文件夹user/1234中的profile.asp显示)。最后一个示例提出了一些问题,因为每个用户都必须有一个包含所有asp文件的文件夹(这远远不是最优的),因此您可能希望使用url queryparameter的一些解释以更智能的方式重定向输入

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

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

包含方式

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

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

<!-- #include virtual="/includes/header.asp" -->

content goes here

<!-- #include virtual="/includes/footer.asp" -->

内容在这里
您的header.asp可能如下所示:

<%@ 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>
<%
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>
<!DOCTYPE html>
<html>
<head>
  <title>Header for all pages</title>
  <link rel="stylesheet" href="/css/site.css" />
</head>
<body>

所有页面的标题
与footer.asp类似:

</body>
</html>

这种策略有一些缺点。标题是相当静态的,这可能会出现一些SEO问题;首先,标题应该适合页面内容,当include包含标题标记时,很难实现这一点。这可以通过在包含部分之前设置的一些全局变量来实现,即:

<%
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文件中为include页面设置了一些期望。至少在构建页面时,你必须非常有纪律。

>。<对我来说,来这里太早了。。。我暂时把它放在这里,以防这个问题被标注错了。它被正确标注了,但我感谢你花时间回答。一旦我开始写一些asp.net页面,我相信它会有所帮助。谢谢,有什么特别的原因让你选择一个基于过时技术的新网站(和你自己的个人倾向)吗?ASP Classic在10多年前就过时了,而且不受支持(至少它不再发展)。如果您想进行绿地开发,您可能应该研究ASP.NET…:-)我目前在使用asp vbscript编写的旧网页上工作,因此为了更加熟悉该语言和用法,我决定将我的网站打造成这样。我知道经典的asp已经过时了。。。我是最新的.Net框架,所以我不关心学习asp.Net,因为我已经编写了c#,并且知道大量的类/方法。我想我的意思是,这是一次学习的经历。这很公平。我不确定你的技能水平,所以如果你进入这个项目