`

将UserControl生成Html代码 (thanks to Jeffrey Zhao )

阅读更多

  1using System;
  2using System.Collections.Generic;
  3using System.Linq;
  4using System.Web;
  5using System.Web.UI;
  6using System.IO;
  7using System.Web.UI.HtmlControls;
  8using System.Reflection;
  9
10/**//// <summary>
11///UserControlRender 的摘要说明
12/// </summary>

13namespace System.Web.UI
14...{
15    public class UserControlRender
16    ...{
17        private Page _thisPage;
18        public UserControlRender()
19        ...{
20            //
21            //TODO: 在此处添加构造函数逻辑
22            //
23        }

24
25        /**//// <summary>
26        /// 加载指定虑拟路径控件
27        /// </summary>
28        /// <param name="path">控件路径</param>
29        /// <returns>返回控件对象</returns>

30        private UserControl LoadUserControl(string path)
31        ...{
32            _thisPage = new MyPage();
33            Control control = _thisPage.LoadControl(path);
34            return (UserControl)control;
35        }

36
37        /**//// <summary>
38        /// 渲染用户控件并生成代码
39        /// </summary>
40        /// <param name="control">目标控件对象</param>
41        /// <returns></returns>

42        private string RenderControlView(UserControl control)
43        ...{
44            AddRangeMark(control);
45
46            StringWriter writer = new StringWriter();
47            this._thisPage.Form.Controls.Add(control);
48            this._thisPage.Server.Execute(this._thisPage, writer, false);
49
50            return RemoveMarkFromControlText(writer.ToString());
51        }

52
53        /**//// <summary>
54        /// 为用户控件内容头尾打上标记
55        /// </summary>
56        /// <param name="control">要渲染的控件</param>

57        private void AddRangeMark(UserControl control)
58        ...{
59            LiteralControl liStart = new LiteralControl();
60            LiteralControl liEnd = new LiteralControl();
61
62            liStart.Text = "<start/>";
63            liEnd.Text = "<end/>";
64
65            control.Controls.AddAt(0, liStart);
66            control.Controls.Add(liEnd);
67        }

68
69        /**//// <summary>
70        /// 将生成的字符串中开始和结束标记去除
71        /// </summary>
72        /// <param name="content">控件生成的代码</param>
73        /// <returns>去除了开始结束标记后的代码</returns>

74        private string RemoveMarkFromControlText(string content)
75        ...{
76            content = content.Substring(content.IndexOf("<start/>") + 9);
77            content = content.Substring(0, content.IndexOf("<end/>"));
78            return content;
79        }

80
81        public string RenderControlView(string path)
82        ...{
83            return RenderControlView(LoadUserControl(path));
84        }

85    }

86
87    public class MyPage : Page
88    ...{
89        HtmlForm form;
90        public MyPage()
91        ...{
92            if (this.Form == null)
93            ...{
94                form = new HtmlForm();
95                this.Controls.Add(form);
96                foreach (MemberInfo item in typeof(Page).FindMembers(MemberTypes.Field, BindingFlags.NonPublic | BindingFlags.Instance, null, null))//查找Page中的_form字段,并将创建的form对象赋值给它
97                ...{
98                    if (item.Name == "_form")
99                    ...{
100                        ((FieldInfo)item).SetValue(this, form);
101                        break;
102                    }

103                }

104            }

105            else
106            ...{
107                form = this.Form;
108            }

109        }

110
111    }

112}

113

分享到:
评论

相关推荐

    jsces 包【JeffreyZhao-jscex-v0.5.0-stable-37-g99f0994】

    【jsces 包【JeffreyZhao-jscex-v0.5.0-stable-37-g99f0994】】是一款基于JavaScript的轻量级编译器和执行环境,由开发者Jeffrey Zhao精心打造。这个版本号"v0.5.0-stable-37-g99f0994"揭示了软件的稳定性和开发迭代...

    MVCPatch jeffrey zhao的开源项目源码

    【MVCPatch】是由开发者jeffrey zhao创建的一个开源项目,主要针对Microsoft的ASP.NET MVC框架进行增强和修补。这个项目的源代码可以在http://mvcpatch.codeplex.com/SourceControl/changeset/view/28417上查看,...

    An Introduction to Data Science

    An Introduction to Data Science by Jeffrey S. Saltz and Jeffrey M. Stanton is an easy-to-read, gentle introduction for people with a wide range of backgrounds into the world of data science. Needing ...

    编译原理虎书随书代码

    最后,目标代码生成器将中间代码转换为目标机器的指令集。这个过程要考虑机器的架构特性和指令集体系结构。代码可能包括针对特定架构的目标代码生成器。 通过研究“虎书”的随书代码,读者可以深入理解编译器设计的...

    JEFFREY

    【标题】:JEFFREY 字体介绍及应用 【描述】:JEFFREY 是一款独特的字体,可能以其简洁的线条、个性化的造型或特定的设计风格为特点。这款字体在设计时可能考虑到了易读性、视觉冲击力以及与各种内容的搭配效果。在...

    NET框架程序设计(作者Jeffrey Richter)

    .NET框架是微软公司开发的一个全面的、用于构建和运行现代应用程序和网络服务的软件平台。...通过阅读这本书,读者将能够深入理解.NET框架的内部工作原理,提升自己的.NET开发技能,从而编写出更高效、更稳定的代码。

    编译原理 pl0源代码

    4. **中间代码生成(Intermediate Code Generation)**:编译器将PL/0的抽象语法树转换为一种中间表示形式,如三地址码或四元式,方便后续优化和目标代码生成。 5. **优化器(Optimizer)**:对中间代码进行优化,...

    编译原理pl0源代码

    4. **中间代码生成器(Intermediate Code Generator)**:将解析后的抽象语法树转化为一种中级表示,如三地址码或四元式,便于后续的优化和目标代码生成。 5. **代码生成器(Code Generator)**:将中间代码转化为...

    LabVIEW for Everyone: Graphical Programming Made Easy and Fun (3rd Edition) by Jeffrey Travis and Jim Kring

    Top LabVIEW experts Jeffrey Travis and Jim Kring teach LabVIEW the easy way: through carefully explained, step-by-step examples that give you reusable code for your own projects! * F* y% z6 }% y) n e...

    数据库系统基础教程(第三版)答案Jeffrey D.Ullman

    《数据库系统基础教程(第三版)答案》是学习数据库理论与实践的重要参考资料,由著名计算机科学家Jeffrey D. Ullman编著。本教程解答了教材中的所有习题,旨在帮助读者深入理解数据库系统的概念、设计和操作。下面...

    NTRU算法原理与实现_密码学源代码_C语言程序_C++程序源代码

    阅读`README.txt`并理解`NTRU`源代码将有助于深入理解NTRU算法的细节和实际应用。 总之,NTRU算法是一种先进的公钥加密技术,其快速的运算速度和相对简单的实现使得它在多种应用场景中受到青睐。通过C语言或C++实现...

    CLR via C#, Jeffrey Richter第四版中英文合集

    《CLR via C#》是微软资深技术专家Jeffrey Richter所著的一本经典书籍,第四版出版于2012年,由MS Press发行。这本书深入浅出地讲解了.NET Framework的核心组件——公共语言运行时(Common Language Runtime,简称...

    From Photoshop to HTML.

    该书是一本实用手册,旨在帮助读者将设计作品从Adobe Photoshop软件中导出,并转化为可用于网页的HTML代码。本书涵盖了从设计到编码的全过程,通过详细的步骤指导,使读者能够更加高效、专业地完成设计到网页制作的...

    jsonMe一个非常轻巧的JSON.NET的实现工具;

    JsonMe-c84c487"中,"JeffreyZhao"可能是作者或者项目维护者的名字,"c84c487"看起来像是Git仓库中的一个提交哈希值,这表明该文件可能是从某个Git版本控制系统中导出的,包含了jsonMe的源代码或特定版本。...

    数据库英教版(Jeffrey D。Ullman)的答案

    《数据库》一书由Jeffrey D. Ullman撰写,是一部在国际上广泛认可的数据库教育经典教材。这本书深入浅出地介绍了数据库设计、理论、管理和应用等方面的知识,是学习数据库系统不可多得的资源。课后习题及其答案则为...

    [数据库系统基础教程].(美)Jeffrey.D.Ullman.中文扫描版

    本书由斯坦福大学知名计算机科学家jeffrey d.ullman和jennifer widom合作编写, 作者采用一种易于理解的、面向用户的方式介绍了数据库系统,主要侧重于介绍数据库的设计与使用以及实际数据库应用的实现。它涵盖了...

    dragon_book 编译原理龙书第二版源代码

    5. **代码生成**:最后,编译器将优化后的中间代码转换为目标机器语言,使其能够在特定的硬件平台上执行。 6. **错误处理**:编译器需要能够识别并报告语法错误、类型错误等,帮助程序员调试代码。 在"1 ...

    精通正则表达式 第3版Jeffrey E·F·Friedl 高清

    java编程思想推荐的正则表达式深入学习资料。本书是讲解正则表达式的经典之作。本书主要讲解了正则表达式的特性和流派、匹配原理、优化原则、实用诀窍以及调校措施,并详细介绍了正则表达式在Perl、Java、.NET、PHP...

    评级或不评级调查生成的共同语音手势的评估方法_To Rate or Not To Rate Investigating Eval

    这篇名为"To Rate or Not To Rate: Investigating Evaluation Methods for Generated Co-Speech Gestures"的研究论文由Pieter Wolfert、Jeffrey M. Girard、Taras Kucherenko和Tony Belpaeme等人共同撰写,探讨了两...

    基于mybatis-generate 的Oracle数据库的分页生成插件

    mybatis 分页 mybatis-...大家知道mybatis自动生成代码是没有分页功能的 我在网上找了很久 有很多内容 但正真可以使用的少之又少 本人整合了网上的资源 整理了基于Oracle数据库的mybatis插件 经测试可以完美运行。。

Global site tag (gtag.js) - Google Analytics