说明文作文600字:使表格正文可以滚动

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 03:19:27

使表格正文可以滚动

发布日期: 1/4/2005 | 更新日期: 1/4/2005

作者 Jay Allen、Mark Davis、Heidi Housten 和 Tosh Meston
 Microsoft Corporation

岁末将至,落叶纷飞,天气愈加寒冷,Web Team 的思绪转向了更为重要的事情 — Xbox Live 的初次亮相!Web Team 一直忙于将以太网运行在 TV 上,使坐垫更为蓬松,并挑选我们的 Gamertags。

但是在消磨时光之前,我们已经回答了一组问题,并将另一组问题打包以电子邮件形式发送给热心读者了。本月,我们提供以下内容:

有关处理 Web 应用程序中长时间运行的任务的提示。

使表格内容可滚动的行为。

通过脚本清除身份验证缓存的方法。

以及更为精彩的简短问答。

请始终将您的疑问和 Web 难题发送至 webtalk@microsoft.com。表现自我的时候到了!

本页内容
在 Web 上寻找更多的时间 获取滚动 Web Team 简短问答

在 Web 上寻找更多的时间

亲爱的 Web Team

我从一个Intranet 站点获得了一个名为 ActiveX DLL 的 ASP 页。该 DLL 执行创建 Microsoft Word 和 Excel 文件这一耗时较长的任务。不幸的是,在任务执行过程中,Internet Explorer 5 显示了错误页。

Rajesh

Web Team 的答复:

最简单的方式是,Web 浏览器从 Web 服务器中请求一个页,而且稍后 Web 服务器会以 HTML Web 页(或其他一些格式)提供响应。Web 服务器旨在每分钟处理上千个此类同步事务。多数时间,Web 服务器会返回请求的 Web 页,但是,在出现问题的时候,我们会得到一个显示 HTTP 状态代码的错误页。

Internet 用户熟悉许多由 Web 服务器返回的状态代码,例如,在没有找到某页时返回的 404 错误。由 Web 服务器报告的状态代码的 400 范围指示浏览器请求中有错误,该错误阻止响应完成。由 Web 服务器报告的状态代码的 500 范围指示服务器错误。极有可能的是,您的 ASP 页请求返回一个 500 错误(内部服务器错误)。ASP 在状态页的技术信息部分内提供了更详细的信息,一个可能的原因是您的脚本花费了过长的时间才完成。

的确,这非常有趣,但是这与您的问题有什么关联呢?嗯,第一件事是,现在您了解了 Web 的同步性质,并明白了设计良好的 Web 应用程序会限制资源数量,以及它用来处理 Web 请求的时间。如果花过长的时间来处理某个 Web 请求,则 Web 服务器可用来处理其他 Web 请求的时间将更少,因此该服务器或许会超时,而且用户将不知道其请求处理得怎样了。知道了这些信息,您就可以通过一些操作来解决这个问题。

首先,通过设置 Server.ScriptTimeout 属性,通知 ASP 您要给自己的脚本更多的时间来运行。这是一个笨拙的方法(默认值为 90 秒),因此您或许希望在用户提交请求前,通知他们这会是个耗时过长的操作。用户的有限注意广度是更甚于任何浏览器和服务器超时的重要考虑事项!一个通知用户的简单方法是,返回显示消息的 Web 页,并立即将请求提交至要执行耗时较长的操作的 ASP 页。

Please wait while your files are generated...

一个更好的解决方案是,将任务委托给另一个进程,例如,使用消息队列 (MSMQ)。Microsoft .NET 将该功能封装在 System.Messaging 命名空间中。 接收请求后,Web 服务器会将消息提交至其中有另一个应用程序在执行处理的队列。该 Web 服务器向用户返回一个包含进度报告的 Web 页。该页定期刷新以查看 Web 服务器上的进度,并相应地更新进度。有关消息队列以及检看进度的讨论超出了本文范围,但是此处有一个 Web 服务器可以返回的示例 Web 页:

Please wait while we generate your files...
Estimated time to completion ... 5 seconds

如果可以将任务分解为较小的操作,那么您就可以在每段代码完成后,让服务器返回一个 Web 页。每个 Web 页都将为用户提供有关进度的反馈,然后提交下一段工作的请求。

最后,您就可以考虑缩短任务的处理时间了。如果您的 ActiveX_ DLL 能够使 Word 和 Excel 自动生成这些文件,那么或许可以使用另一个格式。请注意,Microsoft Office 产品设计为运行在客户端上,不是 Web 服务器上,这一点至关重要。从理论上讲,任何运行在 Web 服务器上的软件都经过特别设计,可在服务器环境中正常运行并自由伸缩,在实现您的服务器组件时,这是一个重要的设计注意事项。如果您要生成由用户查看的文件,则您可能会考虑将 HTML 返回到用户。您可以设置 MIME 标题类型,以便使 HTML 可由另一个应用程序(例如,Excel)打开。有关详细信息,请参阅 Giving Your Name and Other Properties。

返回页首

获取滚动

亲爱的 Web Team

我想在我的 Web 页上添加一个 HTML 表元素,该页上的第一个 TR 元素(或者可能是 )是静态的,而其余的 TR 元素(或 )是可以滚动的,这可以实现吗?到目前为止,我已经尝试了为标题创建一个单独的表元素,然后围绕“正文”表包装一个 div 元素,并向样式属性添加“overflow: auto”。我是为专门使用 Internet Explorer 5.0 或更高版本的客户端进行开发,因此不需要跨浏览器兼容。

如果您有解决方案,那么我如何能将其与 ASP.NET DataGrid 相结合?

谢谢,
Christopher Perrins

Web Team 的答复:

如果 Web Team 在每次收到开发人员有关此功能的电子邮件时都可以得到一美元,那么我们就不会总去回味以往纳斯达克指数暴涨时的美好时光了。好了,现在是解决这个问题、并为我们的忠实读者给出满意答案的时候了。无疑,我们想以最佳方式来提供 HTML 行为,以便我们可以附加任何所需的表,甚至是由 ASP.NET DataGrid 发送的表。我们的控件 ScrollTable.htc 可以由您来进行自定义或改进。我们阐释它的工作原理。

首先,通过指定用在表元素上的 CSS 类中的行为属性,来将 scrolltable.htc 附加到该元素。

   behavior:url(scrolltable.htc);

ondocumentready 事件激发时,该行为会通过调用表上的 cloneNode(false) 创建两个表元素。我们克隆不带有子元素的表,而不是创建新表,以便保留诸如 cellSpacing 和样式之类的属性,而不必手动将每个属性添加至两个新表。我们创建的这两个表元素是,包含测试页中表的第一行的标题和包含所有其他行的正文。将正文表插入 CSS 溢出属性设为自动的容器 DIV,这样就可以在必要时进行滚动了。然后,修改测试页中的表以使其只包含两行。第一行包含一个 TD 和标题表,第二行包含一个带有容器 DIV 的 TD。接下来,将该表第一行中的所有单元格的 offsetWidths 存储在数组 rgWidths 中,以便我们可以设置标题和正文表中的单元格,并使它们保持同步。然后,将该标题行添加到 tblHeader 元素,将正文行添加到 tblBody 元素。接着,将 tblBody 插入容器 DIV。之后,将所有行从表中移除,并插入新的两行,一行用于 tblHeader,另一行用于 tblBody。将这些行添加至正文表和标题表后,将两个表中列的宽度设置为存储在数组中的宽度值。最后,设置一些有关该标题和正文的属性,以使其外观看起来整齐些。

在 TestPage.htm 中,您会看到我们向 TABLE 添加了三个 expando 属性。第一个属性是 bodyHeight,用于设置正文高度。如果不设置该属性,则正文将不会滚动。还有 headerCSSbodyCSS,它们只是使您可以为标题表和正文表指定单独的 CSS 类。

以下是源代码:

ScrollTable.htc

TestPage.htm

Header AHeader BHeader C
AaaaaaaaaaaaaaaaaaaBCcccccccccccccccccc
ABbbbbbbC
ABC
ABC
ABC
ABC
ABC
ABC
ABC
返回页首

Web Team 简短问答

请出示您的凭据

问:Jerry B. 写道:“在用户验证并处理完他的请求后,我想让他无效。假设该计算机处于一个允许任何人登录并使用它的开放环境中,我想让用户每次访问 Web 上的特定模块时,都碰到新的挑战。”

答:这是 Internet Explorer 小组经常需要用到的功能,这个组的人非常好,他们已经在 Internet Explorer 6.0 SP1 中为我们提供了一个实现该目的的方法。您所要做的就是在该文档上调用 execCommand 方法,从而将 ClearAuthenticationCache 作为命令参数传入,如下所示:

document.execCommand("ClearAuthenticationCache");

这个命令会刷新缓存中的所有凭据,因此如果用户请求需要进行身份验证的资源,则会再次出现身份验证提示。

共享的 COM

问:Shailen Bhatt 问:“我希望使用以我的 ASP 应用程序开发的 COM 组件。问题是,我想在所有 ASP 页中使用该组件的同一对象。我怎样能够在所有的 ASP 页中使用相同的对象呢?”

答:好的,Shailen,要在自己的 ASP 中实现这个目的,您应当在 Global.asa 中的 Application_OnStart 事件过程中创建对象的实例,并将对该对象的引用放入您的所有页都可以访问的 Application 变量中。下面是一个示例:

For ASP (Global.asa):Sub Application_OnStart   Set Application("ourObj") = Server.CreateObject("OurProgID")End Sub

然而,如果您使用的是 .NET Framework,则可以在 Global.asax 中的 Application_Start 事件过程中执行相同的操作,以下是 Visual Basic_.NET 中的示例:

For ASP.NET (Global.asax):Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)Application("ourObj") = New ourClass()End Sub

Internet Explorer WebControls

问:S. Mohan 考虑的问题是:“我们想为自己的应用程序创建一个可与 Internet Explorer 工具栏停靠在一起的自定义工具栏。这可以是由 Web 服务器提供的动态 Internet Explorer吗?”

答:一个称为 Microsoft Internet Explorer WebControls 的 ASP.NET WebControl 集应当会满足您的要求。在该集中,有一个非常酷眩的工具栏控件,而且该控件易于在 ASP.NET 应用程序中实现。完全可将该工具栏置于或停靠 在 Internet Explorer 窗口或包含 IFRAME 的顶部。可将各种控件置于其上,而且可以用您喜爱的方式对其进行脚本撰写和样式设置。目前,Internet Explorer WebControls 并不受支持,但是您可以从 MSDN Download Center 下载并安装它们。

可靠的 OnPropertyChange

问:Craig 写道:“我需要在文本框中的内容长度大于 0 时启用按钮。我可以捕获 onkeypress 事件,但是如果用户后退或清除该文本框,我就无法获得事件,并且 onchange 只在用户实际离开文本框后才激发。我如何能够捕获这些事件?”

答:您应当处理 onPropertyChange 事件。更改文本框的任何属性(包括从键盘、鼠标或脚本向文本框输入的内容)时,该事件都会激发。


喂?有人吗?

问:Dax Westerman 问;“有没有用于在 Web 服务提供其响应之前,让该服务检测连接何时从浏览器断开的方法?我可以利用来自客户端的确认来解决这个问题,但是,从根本上来说,这样做似乎是在用一个复杂的方式来处理一个(有望)可以直接解决掉的问题。”

答:Dax,不用再费心寻找了,就是 IsClientConnected 属性。ASP 在很早以前就在 Response 对象上具备了该属性,对于 ASP.NET 中的 Web 服务,您可以在您的 Context.Response 对象上找到该属性。您的 Web 服务可以在执行代价昂贵的处理并发回完整的响应之前,检查该属性。有关详细信息,请参阅 NET Framework Class Library 文档。