您现在的位置是:首页 > cms教程 > Discuz教程Discuz教程

Discuz!NT生成模板执行方式

怀蝶2025-06-29Discuz教程已有人查阅

导读1、ASP.NET内联编码编译时间问题先说下我的一个试验:新建一个WebApplication工程,打开Default.aspx文件,删除除之外的内容。之后在它的下边添加如下代码:

1、ASP.NET内联编码编译时间问题
先说下我的一个试验:
新建一个WebApplication工程,打开Default.aspx文件,删除除
<%@ Page Language="C#" AutoEventWireup="true" EnableViewState="true" Inherits="Test2010._Default" %>
之外的内容。之后在它的下边添加如下代码:
<%@ Page Language="C#" AutoEventWireup="true" EnableViewState="true" Inherits="Test2010._Default" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Text" %>
<script runat="server">
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
StringBuilder bld = new StringBuilder();
bld.Append("abc");
bld.Append("<script type=\"text/javascript\"");
bld.Append("\">alert('abc')</");
bld.Append("script>\r\n");
Response.Write(bld.ToString());
Response.Write(sss());
}
public string sss()
{
return " abcdefg";
}
</script>
编译,发布。打开发布后的网站,在Bin文件夹中可以看到生成的DLL。用Reflector打开这个DLL后,可以发现没有我在页面中添加的sss()这个函数。
查看发布后的页面文件,可以看到页面文件中的内容与发布前没有任何不同,说明页面内联的代码在深层和发布时都没有被编译。
但是,与其相对应的Cs文件却没有了。它已经被编译到DLL中去了。这一点,通过Reflector可以很清楚地看到。
按F5运行这个项目,在浏览器查看Default.aspx的原文件,可以看见只有这么一行东西:
abc<script type="text/javascript"">alert('abc')</script>
abcdefg
这是已经被编译后输出到浏览器的代码。内联页面内的代码此时已经被解析过了。于是,有一个结论:页面内联的代码是在执行时进行解析的(或者叫编译,我不知道究竟该怎么叫它)。
2、看看DNT的页面文件
DNT的UI是基于模板机制的。模板都存放在Discuz.Web工程中的Aspx文件夹中。每个模板主题一个文件夹。查看这些模板中的页面文件,可以看见每个页面中都有如下的组织结构:
<%@ Page language="c#" AutoEventWireup="false" EnableViewState="false" Inherits="指示了隐藏的代码类" %>
<%@ Import namespace="System.Data" %>
<%@ Import namespace="Discuz.Common" %>
<%@ Import namespace="Discuz.Forum" %>
<%@ Import namespace="Discuz.Entity" %>
<script runat="server">
override protected void OnInit(EventArgs e)
{
/*
This page was created by Discuz!NT Template Engine at 2025-6-29 17:25:25.
本页面代码由Discuz!NT模板引擎生成于 2025-6-29 17:25:25.
*/
base.OnInit(e);
templateBuilder.Capacity = 220000;
//……省略中间内容……..
Response.Write(templateBuilder.ToString());
}
</script>
这里,首先使用StringBulider templateBuilder组织需要页面内容,然后通过Response.Write(templateBuilder.ToString());将组织好的内容输出到Http响应的输出流中。经过IIS解析后(也可能是CGI之类的东西,我没查到),发给客户端,显示在浏览器中。
这样的代码发布后依然包含在页面文件中。后边添加的模板,也是这样的结构,他们共用一个已经编译好的存放在DLL中的页面类。这些Aspx文件中的东西只有等到需要时才被编译。据说这种做法可以在程序编译好后为程序添加模板。
DNT有自己的后台项目Discuz.Web.Admin包含了自动生成模板的功能。它可以根据用户定义好的css文件,生成论坛可以用的模板,输出的同样是具有这种结构的Aspx文件。这样,不同的DNT模板就可以共用一个cs文件,即编译在DLL文件中的页面类。最终用户只需要定义模板显示的方式(CSS),而不需要去花时间理解页面内的各种函数。即使不理解Asp.Net,也能定义出漂亮的模板了。

本文标签:

很赞哦! ()

相关教程

相关源码

  • (自适应)证书授权书防伪查询系统pbootcms模板本模板基于PbootCMS系统开发,为各类证书查询机构设计,可快速构建高效安全的证书核验平台。采用响应式布局技术,自动适配手机端操作,支持批量导入证书数据,提供便捷的查询接口,满足机构证书管理及用户在线核验需求。查看源码
  • 帝国CMS7.5小说推荐公众号导航带wap手机站+带采集工具本模板为小说导航类网站设计开发,基于帝国CMS7.5内核构建,针对小说阅读领域的分类聚合需求进行深度优化。通过智能分类系统和用户行为分析,实现小说资源的精准推荐与导航功能。查看源码
  • (PC+WAP)绿色日志美文文学说说博客网站pbootcms模板除日志博客类网站外,通过替换图文内容可快速适配:心情日记分享平台、文学创作社区、朋友圈内容聚合站、美文鉴赏网站、读书笔记平台等应用场景。查看源码
  • (自适应)工商代理公司注册财务会计pbootcms模板免费下载为工商代理、财务会计服务企业设计的网站模板,基于PbootCMS开发,充分考虑了企业服务行业的展示需求与客户转化路径。设计风格专业严谨,布局清晰合理,呈现企业服务内容与专业优势。查看源码
  • (响应式)wordpress模板VieuV4.5主题资讯自媒体博客源码Vieu主题专注于个人博客与企业展示场景,采用响应式设计确保在手机、电脑、平板等多设备上的展示。主题集成会员中心、投稿系统、内容保护等实用功能,满足现代博客网站的建设需求。查看源码
  • (自适应)蓝色基建施工工程建筑集团网站pbootcms模板下载为工程建筑、基建施工类企业打造的PbootCMS模板,采用现代化设计理念,突出企业实力与项目展示,帮助建筑类企业快速建立专业在线门户。查看源码
分享笔记 (共有 篇笔记)
验证码:

本栏推荐