前面我介绍了一些常用的Page指令,考虑到方便性,ASP.NET还允许我们在web.config中为一些常用的指令配置默认值。下面我就一些常用的场景来说明这些全局配置的方便性。
1. 通常,我在创建一个网站项目时,肯定会决定不使用ViewState和Session的。那么如果为每个页面设置EnableViewState,EnableSessionState指令属性,那就显得太麻烦了,而且还容易遗漏。此时,我们可以直接在web.config中为这些参数指定一个全局的默认值:
<pages enableViewState="false" enableSessionState="false"></pages>
补充说明一下:全局禁用Session的彻底方法是把Session对应的HttpModule从httpModules列表中移除。
web.config允许我们设置Page默认参数的具体配置节如下:
- <pages
- buffer="[True|False]"
- enableEventValidation="[True|False]"
- enableSessionState="[True|False|ReadOnly]"
- enableViewState="[True|False]"
- enableViewStateMac="[True|False]"
- smartNavigation="[True|False]"
- autoEventWireup="[True|False]"
- pageBaseType="typename, assembly"
- userControlBaseType="typename"
- validateRequest="[True|False]"
- masterPageFile="file path"
- theme="string"
- styleSheetTheme="string"
- maxPageStateFieldLength="number"
- compilationMode="[Always|Auto|Never]"
- pageParserFilterType="string"
- viewStateEncryptionMode="[Always|Auto|Never]"
- maintainScrollPositionOnPostBack="[True|False]"
-
asyncTimeout="number"
>
<controls>...</controls>
<namespaces>...</namespaces>
<tagmapping>...</tagmapping>
</pages>
2. 为了代码重用,设计用户控件也是很常用的方法。
我们可以使用 @ Register指令 在页面注册需要使用的UserControl或者WebControl。然而,有些控件比较通用,许多页面都会使用它,那么就不要再使用 @ Register指令了,可以在web.config中统一注册。例如:
- <pages>
- <controls>
- <add tagPrefix="fish" tagName="MainMenu" src="~/Controls/MainMenu.ascx" />
- <add tagPrefix="fish" tagName="PageHeader" src="~/Controls/PageHeader.ascx" />
- </controls>
- </pages>
有了这个定义后,我就可以在任何页面中直接使用:
<fish:PageHeader runat="server" ID="PageHeader1" />
3. 对于喜欢使用页面内联代码的人来说,可能经常需要使用自己定义的类型。如果这些类型定义在某个命名空间中,那么就需要在内联代码中采用完整命名空间的写法。虽然这样做没有什么问题,但就是麻烦,于是,我们可以在页面中使用 @ Import指令 来导入我们需要使用的命名空间,但是这个指令每次只能导入一个命名空间,而且每个页面还得重复导入,显然不够方便。
为了方便使用一些常用的命名空间,我们可以在web.config中统一指定,例如:
<page>
<namespaces>
<add namespace="MyMVC"/>
<add namespace="WebSiteCommonLib"/>
</namespaces>
</page>
这样设置后,所有页面就可以直接使用这些命名空间下的类型了。