问:我有一个无窗口的 JavaScript 菜单,它被有窗口的下拉列表遮盖了。我如何才能防止这种情况呢?
答:不管容器需要什么,所有的有窗口元素都将自己绘制在所有无窗口元素之上。然而,就像无窗口元素相互遵循 Z 索引属性一样,有窗口元素也相互遵循 Z 索引属性。有关其工作方式的更多信息,请参阅 How the Z-index Attribute Works for HTML Elements。
因此,处理这个问题的一种方法就是将菜单转换为 DHTML 脚本小程序,并将该 <OBJECT> 放入浮动的 <div> 中,如下所示中,如下所示:
<div id='ctl00_MasterContentplaceholder_newdate_div'
style='position: absolute;display:inline;z-index:8;' class=''>
<OBJECT ID='ctl00_MasterContentplaceholder_newdate_obj'
DATA='/aspnet_client/esupplyctl/ClientTools2.htm' style='z-index:8'
TYPE='text/x-scriptlet' >
</OBJECT>
</div>
可以在 Introduction to Scriptlets 上获得关于脚本小程序的概述。此外,如果您需要有关如何创建 DHTML 脚本小程序的更多详细信息,Instant Scriptlets(Wrox,1998 — 作者为 Dino Esposito)一书中包含了许多有关此内容的信息。
另一种选择是将 windows.creatPopup 用于您的菜单,它也是一个有窗口的元素。您可以使用 HTML 组件 (HTC) 和 XML 文件来定义菜单项目。
问:我总是从 ASP.NET 页面中获得以下与 cookie 有关的错误:"A potentially dangerous Request.Cookies value was detected from the client: (W0073355_ID="...icVVWBPvb9OnploMFqAQ==")"。
看起来好像是一些字符的组合引发了这个异常。如何才能改变这种行为呢?因为在等号之后没有任何文本,所以不需要标记该 cookie。
答:正如您所知的那样,这是一个设计用来防止用 HTML 表单提交脚本的安全功能。虽然基本的 64 个字符在 cookie 值中没有一个是无效的,但是有一些组合却不能接受,包括:
• <{a-z}
• <!
• expression(
• on{a-z}*=
• &#
• script{space}*
如果引发了 HttpRequestValidationException 异常,则解决这一问题的唯一方法就是禁止使用这些 cookie 来请求页面验证。然而,如果您禁止请求验证,则您自己必须对从用户接收到的任何输入执行验证,这一点非常重要。在 ASP.NET 1.1 中引入的请求验证功能被设计为抵御跨站点脚本攻击的第一道防线。没有此类验证,您的应用程序就很容易遭受此类攻击。
问:当我从 ASP 转换到 ASP.NET 时,是否意味着我必须从三层体系结构转移到二层体系结构?
答:没有任何更改会限制您的 ASP.NET 应用程序的层数。实际上,这是一种设计决策。因此答案是否定的,转换到 ASP.NET 并不意味着必须将三层体系结构转换为二层的版本。
实际上,ASP.NET 允许更多的层,因为您可以将页面逻辑(一个 .cs 或 .dll 中的一个已编译类)和表示代码 (.aspx) 完全分隔开来。此时,您可以选择将业务逻辑放到 bin 文件夹的 .dll 中,或者放到另一个单独的 .dll 中,甚至可以放到 SQL Server? 的存储过程中。您可以有任意多的层。
然而,请注意,您可能需要确保清楚地知道正在讨论的是物理层还是逻辑层。您可以在拥有三层逻辑体系结构的同时仍然维持两层物理体系结构(目的在于避免表示层与业务层之间的跨进程调用的开销)。这对于 ASP 和 ASP.NET 都是如此,但是在讨论 n 层体系结构时,这是有时会被遗漏的重要区别。
