【发布时间】:2014-04-27 06:33:58
【问题描述】:
有没有一种方法可以创建一个网站中的其他页面可以在 HTML 中使用的页面?类似于 ASP.NET 中的母版页所做的那样。
任何有用的帮助将不胜感激。
【问题讨论】:
标签: html asp.net master-pages
有没有一种方法可以创建一个网站中的其他页面可以在 HTML 中使用的页面?类似于 ASP.NET 中的母版页所做的那样。
任何有用的帮助将不胜感激。
【问题讨论】:
标签: html asp.net master-pages
HTML 本身是一种静态语言。其他框架创建动态 HTML (DHTML),例如 ASP.NET。
因此,在 HTML 中纯实现“母版页”是不可能的。
您可以使用 JavaScript 框架 such as AngularJS 来帮助您实现 HTML 中的“母版页”。
如果您对 .NET 感兴趣,您仍然可以在 HTML 中创建母版页,并在 .NET 中添加一些钩子,以便它知道如何呈现主容器。
在 ASP.NET MVC 中,您的母版页(在 ASP.NET MVC 中称为布局)可以有很少的挂钩回到框架和服务器。 Most of it can be HTML.
<!DOCTYPE html>
<html>
<head>
<title>My Movie Site</title>
<link href="~/Styles/Movies.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="container">
<div id="header">
<h1>My Movie Site</h1>
</div>
<div id="main">
@RenderBody()
</div>
<div id="footer">
© @DateTime.Now.Year My Movie Site
</div>
</div>
</body>
</html>
另一个选项(如 Ondrej 所述)是Server Side Includes (SSI)。大多数服务器应该有这个选项。它将允许您将其他 HTML 文件注入页面,从而允许您创建没有特定框架的母版页。
<html>
<title>My Website</title>
<!--#include virtual="/rootPage.html" -->
</html>
最后,我真的建议使用框架,而不是尝试将一堆 SSI 链接在一起。
就iframes 而言,我强烈建议不要使用单独的iframes 一起构建网站。这将变得无法控制和维持。因为您可能无法控制 iframe 内容。此外,如果页面上需要所有 HTML,则应为页面重新创建它,而不是使用 iframes 填充。
所以,使用一个框架。不要写一些疯狂的方法来替换页面上的内容。一个框架将很容易维护并且当你在路上回到它时才有意义。
【讨论】:
您可以通过CSS 管理应用程序的外观和布局。如果你想让你的代码有一些可重用性,你可以尝试使用iframes 来实现类似的东西。
IFrame 有助于将引用的网页与当前页面结合起来,从而允许您重用代码。例如,您可以创建一个 menu.html 文件,然后嵌入到其他页面中 -
<iframe src="menu.html" seamless></iframe>
这里是关于使用 iframe 是否是一种好的做法的平衡讨论 - Are iframes considered 'bad practice'?
【讨论】:
使用框架或 Iframe。您也可以使用 javascript 加载 html。如果这不是您的想法,请使用服务器端母版页。
【讨论】:
不是真的。没有 SSI 的纯 HTML 很困难,但可以实现。 由于浏览器安全设置,这可能无法在本地运行,但如果您将其上传到谷歌文档或免费虚拟主机或您自己的服务器,它应该可以工作。
您可以使用 javascript 和 ajax 请求来填补空白,通过 javascript 文件加载所有脚本和内容...但如果这是您想要的。
这应该会引导您进行概率实现。 可能您必须将 jQuery 源代码添加到 master.js,因为实际文件加载速度可能太慢。
master.js
function add_script(file)
{
var js = document.createElement("script");
js.type = "text/javascript";
js.src = file;
document.body.appendChild(js);
}
function add_stylesheet(file)
{
var css = document.createElement("style");
css.type = "text/css";
css.src = file;
document.body.appendChild(css);
}
add_script('jquery.js');
add_script('jquerui.js');
add_script('whatever.js');
add_style('masterstyle.css');
add_style('jqueryui.css');
window.realcontent = null;// content per page
window.head = null// content to be added above the dynamic content
window.leftcolumn = null//content for left column
window.rightcolumn = null // content for right column
window.bottom = null //footer stuffs
jQuery(document).ready(function()
{
window.realcontent = jQuery('body').html();
jQuery.ajax('masterhead.html').done(function(data)
{
window.header = data;
jQuery.ajax('masterleftcolumn.html').done(function(data)
{
window.leftcolumn = data;
jQuery.ajax('masterrightcolumn.html').done(function(data)
{
window.rightcolumn = data;
jQuery.ajax('masterfooter.html').done(function(data)
{
window.bottom = data;
//finally we can load up everything
jQuery('body').html(window.header + window.leftcolumn + window.realcontent + window.rightcolumn + window.bottom);
// sanitise memory
window.header = null;
window.leftcolumn = null;
window.realcontent = null;
window.rightcolumn = null;
window.bottom = null;
});
});
});
});
});
【讨论】: