大家都知道,在开始WebForm程序时,一个WebForm由.cs代码文件与.aspx页面文件组成。在aspx文件中可以嵌入C#代码,但无法在aspx的嵌入C#代码中定义类,函数和字段等。这样,就限制了单aspx文件场景时所能发挥的功能了。

下面我们就来破除这个限制:

首先来看看下面的Default.aspx文件:

<%@ Page Language="C#" AutoEventWireup="true" %>
<%
//===============
//字符串拼接开始
//===============
System.Diagnostics.Debug.Print("Hello");
}
//字段定义
public const String ACTION_KEY = "action";
//类定义
public class Class1
{
public String Name;
//===============
//字符串拼接结束
//===============
%>

表面上看起来,下面的Class1类没有封闭,应该会导致编译错误,但编译一下试试看呢。结果却是编译成功。这样就可以自定义类和字段了。

原理就是aspx文件在编译的时候会动态生成代码,用<% %>包含的部分就会被拼接到类似于@__Render__control1方法的内部,这种做法那么下面的做法就有点类似于SQL注入了。根据上面的aspx文件,会动态生成如下的代码文件:

#pragma checksum "E:\工作项目\loncomip\DCIMSClient_1.2\DCIMSWebSite\Default.aspx" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "6F470031E504F5735FDF857C2F72979997EAFC5C"
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.17929
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------ namespace ASP { #line 285 "C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\web.config"
using System.Web.Profile; #line default
#line hidden #line 280 "C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\web.config"
using System.Text.RegularExpressions; #line default
#line hidden #line 282 "C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\web.config"
using System.Web.Caching; #line default
#line hidden #line 278 "C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\web.config"
using System.Configuration; #line default
#line hidden #line 284 "C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\web.config"
using System.Web.Security; #line default
#line hidden #line 289 "C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\web.config"
using System.Web.UI.HtmlControls; #line default
#line hidden #line 287 "C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\web.config"
using System.Web.UI.WebControls; #line default
#line hidden #line 276 "C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\web.config"
using System.Collections; #line default
#line hidden #line 275 "C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\web.config"
using System; #line default
#line hidden #line 286 "C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\web.config"
using System.Web.UI; #line default
#line hidden #line 281 "C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\web.config"
using System.Web; #line default
#line hidden #line 283 "C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\web.config"
using System.Web.SessionState; #line default
#line hidden #line 277 "C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\web.config"
using System.Collections.Specialized; #line default
#line hidden #line 279 "C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\web.config"
using System.Text; #line default
#line hidden #line 288 "C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\web.config"
using System.Web.UI.WebControls.WebParts; #line default
#line hidden [System.Runtime.CompilerServices.CompilerGlobalScopeAttribute()]
public class default_aspx : global::System.Web.UI.Page, System.Web.SessionState.IRequiresSessionState, System.Web.IHttpHandler { private static bool @__initialized; private static object @__fileDependencies; [System.Diagnostics.DebuggerNonUserCodeAttribute()]
public default_aspx() {
string[] dependencies;
((global::System.Web.UI.Page)(this)).AppRelativeVirtualPath = "~/Default.aspx";
if ((global::ASP.default_aspx.@__initialized == false)) {
dependencies = new string[];
dependencies[] = "~/Default.aspx";
global::ASP.default_aspx.@__fileDependencies = this.GetWrappedFileDependencies(dependencies);
global::ASP.default_aspx.@__initialized = true;
}
this.Server.ScriptTimeout = ;
} protected System.Web.Profile.DefaultProfile Profile {
get {
return ((System.Web.Profile.DefaultProfile)(this.Context.Profile));
}
} protected override bool SupportAutoEvents {
get {
return false;
}
} protected System.Web.HttpApplication ApplicationInstance {
get {
return ((System.Web.HttpApplication)(this.Context.ApplicationInstance));
}
} [System.Diagnostics.DebuggerNonUserCodeAttribute()]
private void @__BuildControlTree(default_aspx @__ctrl) { #line 1 "E:\工作项目\loncomip\DCIMSClient_1.2\DCIMSWebSite\Default.aspx"
this.InitializeCulture(); #line default
#line hidden
@__ctrl.SetRenderMethodDelegate(new System.Web.UI.RenderMethod(this.@__Render__control1));
} private void @__Render__control1(System.Web.UI.HtmlTextWriter @__w, System.Web.UI.Control parameterContainer) { #line 2 "E:\工作项目\loncomip\DCIMSClient_1.2\DCIMSWebSite\Default.aspx" //===============
//字符串拼接开始
//===============
System.Diagnostics.Debug.Print("Hello");
}
//字段定义
public const String ACTION_KEY = "action";
//类定义
public class Class1
{
public String Name;
//===============
//字符串拼接结束
//=============== #line default
#line hidden
} [System.Diagnostics.DebuggerNonUserCodeAttribute()]
protected override void FrameworkInitialize() {
base.FrameworkInitialize();
this.@__BuildControlTree(this);
this.AddWrappedFileDependencies(global::ASP.default_aspx.@__fileDependencies);
this.Request.ValidateInput();
} [System.Diagnostics.DebuggerNonUserCodeAttribute()]
public override int GetTypeHashCode() {
return ;
} [System.Diagnostics.DebuggerNonUserCodeAttribute()]
public override void ProcessRequest(System.Web.HttpContext context) {
base.ProcessRequest(context);
}
}
}

希望能对大家有用,哈哈。

在无代码文件的aspx文件中添加类、函数和字段的方法的更多相关文章

  1. JabRef中添加中文文献出现乱码 解决方法

    JabRef中添加中文文献出现乱码 解决方法     问题描述 JaBRef是一款开源的文献管理软件,主要用来管理bibtex格式的参考文献,可以与LATEX配合使用,方便论文参考文献的使用.文献管理 ...

  2. 向ArcGIS的ToolBarControl中添加任意的windows组建的方法[转]

    向ArcGIS的ToolBarControl中添加任意的windows组建的方法[转] Link: http://www.cnblogs.com/mymhj/archive/2012/10/12/27 ...

  3. element-ui 的el-button组件中添加自定义颜色和图标的实现方法

    这篇文章主要介绍了element-ui 的el-button组件中添加自定义颜色和图标的实现方法,目前的解决方案是:添加一个自定义全局指令,同时在element-ui源码中,加入对应的组件.需要的朋友 ...

  4. eImage(仅两行代码实现输出从数据库中查询到的二进制字段)标签

    功能: 专门用于向浏览器输出从数据库中查询到的二进制字段.支持通用的几十种文件类型 别名为edoc 使用方法: <chtml><eimage id=书包名type=类型>key ...

  5. Objective-C的面向对象中,类有真正的私有方法和私有属性么?

    在Java/C#等面向对象语言中,方法的访问权限可以通过public/private/protected来控制其访问权限.而在OC中,方法却并没有访问修饰符.那么,我们有没有办法使其方法变为私有? 1 ...

  6. Python中编写类的各种技巧和方法

    简介 有关 Python 内编写类的各种技巧和方法(构建和初始化.重载操作符.类描述.属性访问控制.自定义序列.反射机制.可调用对象.上下文管理.构建描述符对象.Pickling). 你可以把它当作一 ...

  7. idea中添加类和方法注释以及codeCheck

    前言:在idea中我们添加类以及类的方法的注释很有必要,让其他人能够看懂这个类或者函数的作用是什么:为了在开发过程中检查自己的编程规范,可以通过codecheck工具进行自我检查和约束 一.在idea ...

  8. 如何在VS2010中添加ActiveX控件及使用方法

    方法1: 1.首先在在项目上面右击添加类,如下图所示: 2.点击添加ActiveX控件中的MFC类 3.找到需要添加的ActiveX类. 4.点击完成即可. 5.此时转到资源视图,打开如下视图.可能工 ...

  9. 在GDAL中添加GDALRasterizeGeometriesBuf函数

    缘起 GDAL的栅格化算法中有GDALRasterizeLayers.GDALRasterizeLayersBuf和GDALRasterizeGeometries函数,但是没有GDALRasteriz ...

随机推荐

  1. VS的一些错误解决方法记录

    1.errorC2664 "bool CMarkup::AddElem(MCD_CSTR,MCD_CSTR,int)":不能将参数1从“constchar [7]” 转换位&quo ...

  2. bzoj1975: [Sdoi2010]魔法猪学院【k短路&A*算法】

    1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 2446  Solved: 770[Submit][Statu ...

  3. sublime text3安装angularjs插件

    sublime能够支持AngularJS开发那绝对是一件很爽的事情.下面我一步步讲解如何为sublime安装AngularJS插件. 首先提供一个破解版的sublime text 3的下载地址:htt ...

  4. 洛谷P2676 超级书架

    题目描述 Farmer John最近为奶牛们的图书馆添置了一个巨大的书架,尽管它是如此的大,但它还是几乎瞬间就被各种各样的书塞满了.现在,只有书架的顶上还留有一点空间. 所有N(1 <= N & ...

  5. .net面试题汇总-第二篇

    本篇主要关注下,.net面试题中经常用的算法问题 1.有一群猴子,它们每天要吃桃子,它们第一天吃的数量是总量的一半再多一个,第二天吃的是第一天剩下的一半再多一个,第三天吃的是第二天剩下的一半多一个,以 ...

  6. Bestcoder Tom and matrix

    问题描述 Tom放学回家的路上,看到天空中出现一个矩阵.Tom发现,如果矩阵的行.列从0开始标号,第i行第j列的数记为ai,j,那么ai,j=Cji 如果i < j,那么ai,j=0 Tom突发 ...

  7. go语言学习之路五:Go语言内存分配机制make&new

    Go有两种分配内存的机制,规则很简单,下面来简单介绍一下.1.new函数New()函数可以给一个值类型的数据分配内存(不知道什么是值类型请前往切片那一部分),调用成功后返回一个初始化的内存块指针,同时 ...

  8. LayUI后台管理与综合示例

    一.LayUI介绍 layui(谐音:类UI) 是一款采用自身模块规范编写的前端 UI 框架,遵循原生 HTML/CSS/JS 的书写与组织形式,门槛极低,拿来即用.其外在极简,却又不失饱满的内在,体 ...

  9. 大话大前端时代(一) —— Vue 与 iOS 的组件化

    序 今年大前端的概念一而再再而三的被提及,那么大前端时代究竟是什么呢?大前端这个词最早是因为在阿里内部有很多前端开发人员既写前端又写 Java 的 Velocity 模板而得来,不过现在大前端的范围已 ...

  10. SolidEdge 工程图中如何控制是否显示爆炸图组装线

    右击视图,点击性质,取消勾选"显示流线"   即可取消爆炸视图的装配线