code-Behand技术

本文介绍了ASP.NET Web窗体页的基本构成及其工作原理。主要包括可视元素(如HTML和服务器控件)及编程逻辑两大部分。这些元素分别存储在.aspx文件和代码隐藏类文件中,后者可以是Visual Basic或C#。此外还详细解释了CodeBehind属性的作用及Web窗体页如何在运行时被编译。
昨天看了看来朋友博客上的介绍,感觉挺易懂的,分享一下大家看看。
根据 MS 的推荐,一般说来,Web 窗体页由两部分组成:视觉元素(HTML、服务器控件和静态文本)和该页的编程逻辑。其中每一部分都存储在一个单独的文件中。可视元素在一个 .aspx 文件中创建,而代码位于一个单独的类文件中,该文件称作代码隐藏类文件(.aspx.vb 或 .aspx.cs)。

CodeBehind 就是用于指定包含与页关联的类的已编译文件的名称。默认的,如果在 Visual Studio.Net 中创建名为 WebForm1 的 Web 窗体页,对于 Visual Basic,设计器将指定 Codebehind 属性值为 WebForm1.aspx.vb,对于 C# 则为 WebForm1.aspx.cs。该属性不能在运行时使用。

虽然一个 Web 窗体页由两个单独的文件组成,但这两个文件在应用程序运行时形成了一个整体。项目中所有 Web 窗体的代码隐藏类文件都被编译成动态链接库 (.dll) 文件。Web 窗体 .aspx 页文件也会被编译,但编译的方式稍有不同。当用户第一次浏览到 .aspx 页时,ASP.NET 自动生成表示该页的 .NET 类文件,并将其编译成另一个 .dll 文件。为 .aspx 页生成的类从被编译成项目 .dll 文件的代码隐藏类继承。

只要 Web 窗体页受到请求,此 .dll 文件就会在服务器上运行。在运行时,此 .dll 文件通过动态创建输出并将其发送回浏览器或客户端设备来处理传入请求和响应。

在 ASP.NET Page 类模型中,整个 Web 窗体页实际上是一个可执行程序,该程序生成将被发送回浏览器或客户端设备的输出。


当系统为 Web 窗体页创建页和类文件时,它将生成从基 Page 类继承的代码。例如,如果创建新的 Web 窗体页并将其命名为 WebPage1,则会从 System.Web.UI.Page 派生一个名为 WebPage1 的新类。

.aspx 页文件又从派生的 WebPage1 类继承。下图阐释了基 Page 类、派生的类文件和 .aspx 文件的关系。
0

转载于:https://www.cnblogs.com/xfxr/archive/2009/07/27/1532005.html

我说的”空行“是类似于: root@ER706W-4G:/tmp/log# cat systemlog 2025-11-19 00:00:04 logger<5>: [OMADA]The LAN(LAN) IP address/mask of 192.168.0.155 were changed to 192.168.0.1/255.255.255.0. 2025-11-19 00:00:08 dhcp_server<6>: [OMADA]DHCPS initialization succeeded. 2025-11-19 00:00:20 dhcp_server<6>: [OMADA]DHCPS initialization succeeded. 2025-11-19 00:00:23 logger<5>: [OMADA]The LAN(LAN) IP address/mask of 192.168.0.155 were changed to 192.168.0.1/255.255.255.0. 2025-11-19 00:00:46 switch<5>: 55: The physical connection status of [WAN6] was up. 2025-11-19 00:00:48 dhcp_client<5>: [OMADA]WAN1: DHCP client sending DHCP-DISCOVERY timeout. 2025-11-19 00:00:48 dhcp_client<5>: 55 failed to obtain the IP address for WAN1 because no response from the server. 2025-11-19 00:01:07 online_dection<5>: [OMADA][MARK]WAN255: The online detection result of [WAN2] was offline. 2025-11-19 00:01:07 online_dection<5>: [OMADA][MARK]WAN255: The online detection result of [WAN2] was offline. 2025-11-19 00:01:07 online_dection<5>: [OMADA][MARK]WAN755: The online detection result of [WAN7] was offline. 2025-11-19 00:01:07 online_dection<5>: [OMADA][MARK]WAN755: The online detection result of [WAN7] was offline. 2025-11-19 00:01:07 online_dection<5>: [OMADA][MARK]WAN155: The online detection result of [WAN1] was offline. 2025-11-19 00:01:08 online_dection<5>: [OMADA][MARK]WAN155: The online detection result of [WAN1] was offline. 2025-11-19 00:02:17 sntp<4>: Time renew failed, connecting NTP server timeout. root@ER706W-4G:/tmp/log# 这个里面的空行的情况,好像现在用宏也会炸!!void loggerk_reg(unsigned int module_id, unsigned int info_id, ...) { syslog(0,"!!!in loggerk_reg!!!.\n"); char buf[_LOG_BUF_MAX_SIZE]; char *msg = buf; int rlen = _LOG_BUF_MAX_SIZE; int len; va_list args; unsigned int fmt; unsigned int pid; #ifdef __KERNEL__ /*printk("%s,%d:module_id:%d,info_id:%d\n",__FUNCTION__,__LINE__,module_id,info_id);*/ pid = 0; #else pid = getpid(); #endif len = snprintf(msg, rlen, _LOG_TP_IDENT "%u,%u[%u]: ", module_id, info_id, pid); #ifdef __KERNEL__ /*printk("%s,%d:rlen:%d,len:%d\n",__FUNCTION__,__LINE__,rlen,len);*/ #endif if (len < 0 || len >= rlen) { syslog(0,"!!!in loggerk_reg,rlen.\n"); return; } msg += len; rlen -= len; va_start(args, info_id); #define _XPRINTF(fmt, ...) \ do { \ len = snprintf(msg, rlen, fmt _ARGS_SEP_STR, \ ##__VA_ARGS__); \ if (len < 0 || len >= rlen) \ { \ return; \ } \ msg += len; \ rlen -= len; \ } while (0) syslog(0,"!!!in loggerk_reg,behand for!!!.\n"); for (fmt = va_arg(args, unsigned int); fmt != LP_END; fmt = va_arg(args, unsigned int)) { switch (fmt) { case LP_STRING: _XPRINTF("%s", va_arg(args, char *)); syslog(0,"!!!in loggerk_reg,in LP_STRING.\n"); break; case LP_INT32: _XPRINTF("%d", va_arg(args, int)); break; case LP_UINT32: _XPRINTF("%u", va_arg(args, unsigned int)); break; case LP_UINT32HEX: _XPRINTF("%x", va_arg(args, unsigned int)); break; case LP_IPV4: { unsigned int ipv4 = va_arg(args, unsigned int); _XPRINTF("%d.%d.%d.%d", (ipv4 >> 24) & 0xFF, (ipv4 >> 16) & 0xFF, (ipv4 >> 8) & 0xFF, (ipv4 >> 0) & 0xFF); } break; case LP_MARK: _XPRINTF("%s%s", _LOG_OMADA_MARK_HEAD, va_arg(args, char *)); break; case LP_INTERVAL: _XPRINTF("%s%d", _LOG_OMADA_INTERVAL_HEAD, va_arg(args, unsigned int)); break; default: syslog(0,"!!!in loggerk_reg,defult.\n"); return; } } syslog(0,"!!!in loggerk_reg,fmt is%s.\n", msg); msg[-1] = '\0'; va_end(args); #ifdef __KERNEL__ printk(KERN_DEFAULT "%s\n", buf); #else syslog(0, "%s\n", buf); #endif }我往loggerk_reg里加了点打印, syslog(0,"!!!in loggerk_reg,fmt is%s.\n", msg);这行没有输出
最新发布
11-21
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值