【发布时间】:2008-12-12 23:57:56
【问题描述】:
你如何在asp.net页面上正确使用框架,所以我有一个左框架和一个右框架,当我点击左框架中呈现的页面上的链接时,它会在右框架中加载相应的页面?最重要的是,我需要在所有正确框架的页面上都有一个母版页。
我该怎么做?还是有其他方法可以达到同样的效果?
谢谢, 雷。
【问题讨论】:
你如何在asp.net页面上正确使用框架,所以我有一个左框架和一个右框架,当我点击左框架中呈现的页面上的链接时,它会在右框架中加载相应的页面?最重要的是,我需要在所有正确框架的页面上都有一个母版页。
我该怎么做?还是有其他方法可以达到同样的效果?
谢谢, 雷。
【问题讨论】:
是的。框架是邪恶的。你不应该真的使用它们。
它们会导致问题,但在(非常)少数极端情况下,它们可能有用且在开发时间方面更便宜,它们仍然大量出现在生成的 api 文档中。
但不管怎样,看你问如何使用它们,我们开始吧
首先,这取决于您是要使用框架集,还是只是将一些 iframe 放入页面中,iframe 可能更容易,但会描述一个框架集。下面的一些参考资料。如果您在archive.org 上搜索wayback machine,您会看到一些示例,还有Sun 的在线Java 文档曾经在框架集中,但已经多年没有看过了。
http://www.w3schools.com/tags/tag_frameset.asp
http://www.w3schools.com/tags/tag_iframe.asp
基本上,每个框架的内容都是单独的页面,框架本身必须在包含框架集的文件中命名,可能看起来有点像这样:
<html>
<frameset cols="25%,75%">
<frame name="_left" src="nav.aspx" />
<frame name="_right" src="foo.aspx" />
</frameset>
</html>
所以,为了练习起见,给左边的框架属性 name="__left" 和 name="__right" 为右边。
关于链接的重要信息
您的右框架内需要定位到该框架的任何链接都应该具有 target= "_self",并且任何需要转义框架并设置父页面的位置,应该有 target="_top"。
您左框架中的链接需要具有属性 target="_right",并且在单击链接时应该将相应的文档加载到右框架中。
其余的都很正常,将右手框架的内容视为正常页面,制作母版页,所有正常的 html、head、body 标签等。框架没有什么不同在 aspnet 或 php 或其他任何东西中,它只是 html。
你有它,我可能错过了一些东西,因为它们不是我这些天经常使用的东西,但有时,当可访问性和所有无关紧要时,它们可以是一个快速且肮脏的修复。例如,Web 服务站点上的一些不起眼的管理页面,一个了解正在发生的事情的极客每年会访问 12 次。
因此,它们是邪恶的,但这不应该阻止您了解它们,您将真正了解它们为什么是邪恶的,并就何时以及何时不使用它们形成您自己的看法。
【讨论】:
框架在现代 Web 开发中通常不受欢迎,原因有几个(我不会在这里讨论)。你最好使用 CSS 来制作 2 列布局。有很多关于如何在网络上制作这样的布局的好教程。一个例子可以在这里找到:
http://www.456bereastreet.com/lab/developing_with_web_standards/csslayout/2-col/
该网站上的示例如下所示:
http://www.456bereastreet.com/lab/developing_with_web_standards/csslayout/2-col/finished.html
如果您希望布局适合屏幕,只需为#main 定义一个高度。您只需在完成后将其添加到您的 CSS 中:
#main{height:600px}
如果不适合您,请将“600px”更改为您想要的任何高度。
要在母版页上使用它,只需按照上面的示例制作母版页,然后将 #main <div /> 标记的内部作为主要的 ContentPlaceholder
【讨论】:
简短而甜蜜的答案?
框架和框架集在 Web 开发中不再是必需或有用的,它们产生的问题比它们解决的问题多得多。
更详细:
您可能会使用框架来帮助完成三件事:
1)你想左边有一个导航栏,右边有一个单独的内容区域,基本上是垂直分隔的。
非框架解决方案:
使用常规 HTML 和 CSS 创建 2 列布局。查看其他一些资源或“The Last Guide to CSS Layout You'll Ever Need”。
2)您希望能够拥有一个带有导航的文件,而不必在几个不同的页面上拥有它的版本。
非框架解决方案:
将导航保存在单独的文件中,并将其包含在您的所有内容页面中。在 ASP.NET 中,您可以创建一个 UserControl 或 .ascx 文件并将其包含在您的所有更改中。将您的导航放在 UserControl 中,您只需在一处进行更改。
3) 您希望只有需要重新加载的内容框架而不是导航框架的性能更快。
非框架解决方案:
加载整个页面的额外时间可以忽略不计,一次提供单个文档的简单性足以弥补微小的性能损失。
【讨论】:
您可以将 iframe 代码放在正文部分。下面给出一个例子。试试这个:)
<iframe width="100%" height="600px" scrolling="no" seamless="yes" src="https://facebook.com"></iframe>
【讨论】: