zoukankan      html  css  js  c++  java
  • MasterPages: Improved Version(翻译)


    原文的出处见http://authors.aspalliance.com/PaulWilson/Articles/?id=14

    概览
    MasterPages是最灵活和最易于使用的Page Template技术,它既然是由微软开发,将来很可能出现在ASP.NET中。可是,早期的Demo,缺乏设计时支持,性能也较差,并且NamingContainer技术会使ID形如Container:_ctl0:Region:Control此文演示一个改良版的MasterPages,含设计时支持,摒弃灵活但烦人的NamingContainer技术,增加如何定义默认content region和template file。

    建立模板
    要产生一个模板,首先你要产生一个让其它页面共享的asp.net用户控件,加入通用页面布局于其中。然后在页面布局中给出标识,标识此处需要由个别页面定义,由带有唯一ID的ContentRegion控件来标识,此ID往后用于匹配。只要你喜欢,你可以添加多个ContentRegion控件,而且能够添加普通的无需匹配的ID的Content控件进来。
    Listing 1: Creating a Template
    <%@ Control %>
    <%@ Register TagPrefix="Wilson" Assembly="WilsonMasterPages"
        Namespace="Wilson.MasterPages" %>
    <html>
    <head>
      <title>MasterPages</title>
    </head>
    <body>
      <h1><wilson:contentregion id="MPHeader" runat="server">
        Page Header</wilson:contentregion></h1>
    <form id="frmMain" method="post" runat="server">
      <wilson:contentregion id="MPContent" runat="server">
        Default Content</wilson:contentregion>
    </form>
      <h2><wilson:contentregion id="MPFooter" runat="server">
        Page Footer</wilson:contentregion></h2>
    </body>
    </html>



    默认定义
    你能够在web.config定义两个默认设置,第一个Wilson.MasterPages.TemplateFile指定默认的模板控件
    文件,第二个Wilson.MasterPages.DefaultContent指定默认的ContentRegion的ID,便于你直接添加控
    件。默认ContentRegion的概念不是微软的想法,甚至在这里也是可选的,只是我个人觉得有用。


    Listing 2: Defining the Defaults
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <add key="Wilson.MasterPages.TemplateFile" value="~/Template.ascx" />
        <add key="Wilson.MasterPages.DefaultContent" value="MPContent" />
      </appSettings>
      <system.web>
        <!-- Normal web.config settings go here -->
      </system.web>
    </configuration>


    应用模板
    要使用这个模板,首先你要先建立一个空的asp.net页面,删除所有向导自动生成的代码。然后添加带有
    TemplateFile属性的“MasterPage”控件。下一步,直接在MasterPage内增加默认的ContentRegion
    控件。最后,添加其它ContentRegion控件,记得与模板中的ID匹配。
    Listing 3: Using the Template
    <%@ Page %>
    <%@ Register TagPrefix="Wilson" Assembly="WilsonMasterPages"
        Namespace="Wilson.MasterPages" %>
    <wilson:masterpage runat="server" TemplateFile="Template.ascx">
    //原文此处为<wilson:masterpage runat="server" masterpagefile="Template.ascx">
    //实际上原程序定义的是TemplateFile属性
    //《MasterPage之超严重Bug——将导致窗体内带有回发事件的控件无法回发事件——以及解决方案》曾提及

    <wilson:contentregion id="MPHeader" runat="server"> Sample Page</wilson:contentregion> Real Content for the Default ContentRegion </wilson:masterpage>


    源代码要点


    原来的MasterPage例子含ContentContainer和Region控件,他们都继承自PlaceHolder和
    INamingContainer,以及继承自Panel的Content。可是,使用PlaceHolders的目的不是设计时支撑,
    而是运行,所以,我的MasterPage继承自HtmlContainerControl,实现了一个ReadWrite Designer。
    我将Content和Region这两个控件合二为一,成为一个单独的ContentRegion控件,它继承自Panel,我
    为它增加了背景颜色。并且,去掉begin、end标记,以及INamingContainer接口定义。

    结论
    现在这个自定义MasterPage例子支持设计时,更快,并且增加了默认设置。但它仍然不具有可视化设计,那
    样的话需要内建于VS.NET。需要注意的是,去调了INamingContainer,使其更快了,也避免了烦人的嵌套
    命名,但会造成灵活性有所损失,不能监管命名的唯一性,不能进行模板嵌套。最后,到我的主页你会找到一
    些可选择的生成模板的演示例子。




    Author Bio
  • 相关阅读:
    21个高质量的Swift开源iOS App
    浅谈 JavaScriptCore
    开发完 iOS 应用,接下去你该做的事
    Xcode8的调试技能Memory Graph 实战解决闭包引用循环问题
    减肥App计划
    在管理实际中,心态很重要,当你以欣赏的态度去看一件事,你便会看到许多优点,以批评的态度,你便会看到无数缺点。
    怎样做才是一个独立自主的人?
    《圣经、》箴言篇13.3
    做事情需要坚持需要毅力更加需要观察和方法。(人生会遭遇许多事,其中很多是难以解决的,这时心中被盘根错结的烦恼纠缠住,茫茫然不知如何面对?如果能静下心來思考,往往会恍然大悟。 )
    10000单词积累,从今天开始(待续)。。。
  • 原文地址:https://www.cnblogs.com/lwj/p/290500.html
Copyright © 2011-2022 走看看