Asp.net自制模板框架

最近在做个包含了大量重复样式的控件的网站.

如果用MVC的话,我可以针对每个需要单独块编辑的Model写一个局部视图.

然后根据不同逻辑需求拼起来.用现成MVC框架非常容易做到.

但环境是3.5的最高只能用MVC2,没有razor语法,加上没装开发环境.

于是想干脆自己写一个模板生成HTML的框架,一开始也报了点好玩的想法.

但做到后面就觉得,和MVC比起来功能太弱,但自由度很高,想什么样功能都不受限制.

主要代码并不多.

我用json数据来保存视图配置,反序列化得到实例,然后根据手动定义的视图配置+事先定义好的Html模板代码->生成最终html.

分成了几种类型:

page:页面

panel:面板

control:控件.

偷懒没有写各种控件类,所有属性放这个类里,目前功能不多还好,如果扩展越多就比较乱了.

Html模板代码类似这样:用{属性名}来替换数据.

<div class="item"><span class="iname"><i>{require}</i>{label}</span><input id="{name}" name="{name}" placeholder="{placeholder}" text="{label}" onblur="" maxlength="{maxlength}" type="text"></div>

Json数据类似这样:(后来写了一个自动生成基础json数据的工具,生成默认配置的json数据)

{
  "label":"标题",
  "name":"Basic",
  "controls":[
    {
      "name":"id_type",
      "label":"证件类型",
      "type":"combox",
      "column":"BusinessIDCardInfo",
      "valid":"checkNull"
    },
 "panels":[  ]
}

最后在aspx页面调用组合各个page.支持多个页面跳转的功能.check2是由跳转按钮触发,每个页面一个跳转函数,函数内,先执行框架内置检测函数checkfunc也是每个page一个.

最后调用next2(),也是框架内置的跳转函数,根据当前页数决定是跳转还是提交.

<asp:Content ID="Content1" ContentPlaceHolderID="content" Runat="Server">
       <input type="hidden" name="pbtype" value="p" />
        <%=WechatPrefill.Manager.GetHtml("pBasic",1,2,"新的标题") %>
            <%=WechatPrefill.Manager.GetHtml("pEbank",2,2) %>
        <script>function check2() {              function check2() {                if (!checkfunc2()) return;                next2();            }</script>

功能类其实很少,本人写代码习惯是写少一点.

贴一下主要功能代码:

根据反射obj的属性,根据名字替换模板中指定文本.

这里除了string,int还有Dictionary类型需要特别处理.

所有模板替换都在这一个函数里完成.

public static string GetHtml(string tempHtml,object obj)
        {
            var t = obj.GetType();
            foreach (var field in t.GetFields())
            {
                var value=field.GetValue(obj);
                if (value == null)
                {
                    tempHtml = tempHtml.Replace("{" + field.Name + "}", "");
                    continue;
                }
            .....
}

这是Panel类,先替换标题文本,获取panel的模板数据,反射替换模板.

public class Panel : Itemplate
    {
        public string name;
        public string label;
        public string img;
        public List<Control> controls;

        public string Html()
        {
            label = Manager.GetLabel(label);
            var temp = Template.GetTemplate("panel");
            return Template.GetHtml(temp, this);
        }
    }

最后还有生成数据方面.

因为已经用了反射比较影响效率,本来不想用递归,不过由于属性的层级可能很深(可能是A.b.C.D.E.property)所以,如果完全用循环,代码要写很长.

还是递归比较简单.

最后其实我想说,后悔这么做了.

因为太麻烦了,这些功能MVC现成框架都有,而且更强大的多.

玩玩的话是不错,应用到实际项目中还是要慎重考虑.

时间: 2025-01-08 23:07:56

Asp.net自制模板框架的相关文章

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装  (5):前台Jquery easyUI实现   (6):EF上下文实例管理   (7):DBSession的封装   (8):DBSession线程内唯一 前言:前面我们基本已经完成了一个Demo,我们在后面的

ASP.NET MVC+EF框架+EasyUI实现权限管理系列

http://www.cnblogs.com/hanyinglong/archive/2013/03/22/2976478.html ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇 前言:博客又有一段时间没有更新了,心里感觉这段时间空空的,好像什么都没有学下,所以就想写博客,所以就有了这个系列,这里当然也要感谢大家了,因这个 项目我已经上传了,得到了很多网友的评价,也有好多人发邮件给我说这个框架容易出现问题,不能访问,这也是支持我写这个系列的动力,我将这个项目写成一个 系列

ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇 前言:博客又有一段时间没有更新了,心里感觉这段时间空空的,好像什么都没有学下,所以就想写博客,所以就有了这个系列,这里当然也要感谢大家了,因这个项目我已经上传了,得到了很多网友的评价,也有好多人发邮件给我说这个框架容易出现问题,不能访问,这也是支持我写这个系列的动力,我将这个项目写成一个系列,可能要很长时间吧,但是我肯定会一直坚持,如果我哪里写的不好欢迎大家指出我们共同学习,而且我理解的也不是很透彻,所以我想在写这样一遍

分享一个漂亮的ASP.NET MVC界面框架

本文分享一个插件化的界面框架,该框架提供了用户.角色.权限管理功能,也提供了插件的管理和插件中心.下图是该界面框架的样式(全部源码和原理介绍下一篇分享,推荐越多,源码放的越早,呵呵). 要使用该界面框架,你可以通过以下地址来下载到界面框架的Visual Studio 2013模板:下载框架模板. 模板下载地址:http://files.cnblogs.com/baihmpgy/iOpenWorksMvc1.zip 下载后,解压缩,将iOpenWorksMvc1目录直接拷贝到VS的项目模板目录(C

asp.net使用MVC4框架基于NPOI做导出数据到Excel表

NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作.使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本

《ASP.NET MVC 5 框架揭秘》

<ASP.NET MVC 5 框架揭秘> 基本信息 作者: 蒋金楠 出版社:电子工业出版社 ISBN:9787121237812 上架时间:2014-8-1 出版日期:2014 年8月 开本:16开 页码:656 版次:1-1 所属分类:计算机 > 软件与程序设计 > .NET > ASP.NET 更多关于>>> <ASP.NET MVC 5 框架揭秘>   编辑推荐 如果你觉得自己对ASP.NET MVC 所知甚少,可利用本书来系统学习:如果你

新作《ASP.NET MVC 5框架揭秘》正式出版

ASP.NET MVC是一个建立在ASP.NET平台上基于MVC模式的Web开发框架,它提供了一种与Web Form完全不同的开发方式.ASP.NET Web Form借鉴了Windows Form基于控件和事件注册的编程模式,使Web应用的开发变得简单而快捷,但是它却使开发人员与Web的本质渐行渐远.ASP.NET MVC是一种回归,它使开发人员可以真正地面向Web进行编程,我们面对的不再是拖拉到Web页面的控件,而是整个HTTP请求和响应的流程. 这不是一本传统意义上的入门书籍 在<ASP

ASP.NET Core 入门教程 2、使用ASP.NET Core MVC框架构建Web应用

原文:ASP.NET Core 入门教程 2.使用ASP.NET Core MVC框架构建Web应用 一.前言 1.本文主要内容 使用dotnet cli创建基于解决方案(sln+csproj)的项目 使用Visual Studio Code开发基于解决方案(sln+csproj)的项目 Visual Studio Code Solution插件( vscode-solution-explorer)基础使用介绍 基于 .NET Core web项目模板构建 ASP.NET Core MVC We

[ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [上篇]

微软在千禧年推出 .NET战略,并在两年后推出第一个版本的.NET Framework和IDE(Visual Studio.NET 2002,后来改名为Visual Studio),如果你是一个资深的.NET程序员,相信传统的.NET应用的开发方式已经深深地烙印在你的脑子里面..NET Core带来了全新的开发体验,但开发方式的差异根本不足以成为你快速跨入.NET Core 世界的门槛,因为在.NET Core在很多方面比传统的.NET Framework应用开发要简单.为了消除很多尚未接触过.