[翻译]ASP.NET 2.0中的健康监测系统(Health Monitoring)(3) - 触发自定义事件

深入解析McBSP多通道与SPI模式:从原理到实战配置 在嵌入式通信领域,串行外设接口(SPI)和时分复用(TDM)是两种基础且广泛应用的通信机制。SPI以其简单、全双工的特性,常用于芯片间短距离通信;而TDM则允许多个数据流共享同一物理信道,通过时间片轮转实现高效传输。McBSP(多通道缓冲串行端口)作为TI DSP中的强大外设,其核心设计价值在于将这两种机制深度融合。它通过精细的多通道选择机制,实现了对TDM流中特定时间槽(通道)的精准抓取与过滤,这本质上是**时分复用**技术在硬件层面的高效实现。同时,通过**时钟停止模式**,McBSP能够完美模拟SPI 阅读详情
原文地址: http://aspnet.4guysfromrolla.com/articles/062707-1.aspx
[原文源码下载]
[译者改后源码下载]


[翻译]ASP.NET 2.0中的健康监测系统(Health Monitoring)(3) - 触发自定义事件


原文发布日期:2007.06.27
作者: Scott Mitchell
翻译: webabcd


介绍
在之前的文章中(译者注: ASP.NET 2.0中的健康监测系统(Health Monitoring)(1) - 基本应用, ASP.NET 2.0中的健康监测系统(Health Monitoring)(2) - 通过Email发送监测信息),我们已经知道了ASP.NET 2.0的健康监测系统是用于监测ASP.NET应用程序的运行状况的,它可以记录事件信息到你指定的日志源中。这个健康监测系统中包括大量的预定义事件,在ASP.NET程序运行期间,会自动地触发相关的事件。 但是,有的时候我们需要通过自己的逻辑来触发某一事件, 此时,我们就应该为健康监测系统创建我们自己的自定义事件。

在本文中,我们将会看到如何创建一个自定义事件,以及如何触发这个自定义事件。 当健康监测系统的预定义事件被触发的时候,健康监测系统会通过Web.config中的配置信息来决定将详细的事件信息记录到哪个日志源中。 本文中,我们会创建一个自定义事件,使得当一个被锁定的用户试图登录的时候,将其信息记录到相关的日志源中。 继续往下看,你会知道得更多!


需要了解的知识点
ASP.NET 2.0的Membership可以让开发人员方便地开发出用户管理的功能。 更多的关于ASP.NET 2.0用户管理的相关信息,可以参考 Examining ASP.NET 2.0's Membership, Roles, and Profile。 出于安全目的,如果某个用户在一段时间内登录失败的次数超出了某个值的话,Membership就会锁定该用户。 一旦某一用户被锁定了,那么他将无法再登录站点,直到管理员解锁这个帐户。参考上面推荐的那个系列文章的第4部分,其中介绍了如何记录被锁定的用户的登录情况到数据库中,以便管理员查看,管理员可以通过一个界面来集中管理被锁定的用户,同时也提供了解锁用户的功能。

我们可以加强一下上面的功能,使其可以通过健康监测系统来记录被锁定的试图登录的用户。 好了,让我们来做一些必要的配置吧,以便当相关的事件发生的时候,系统会自动地发邮件给管理员。 (参考 通过Email发送监测信息( 中文在这里),通过该文你可以了解更多的健康监测系统中通过邮件记录事件的相关信息。)

虽然默认情况下,ASP.NET运行时可以记录不同的验证级别的事件,但是如果用户登录失败的原因是因为该用户已被锁定的话,那么它将无法记录。 另外,它也不是健康监测系统的内置事件。 所以,请跟着我来完成如下3个任务:
    1、创建一个自定义事件类(当被锁定的用户试图登录的时候将会触发它)
    2、当被锁定的用户试图登录的时候触发我们第一步创建的那个事件
    3、更新Web.config中与健康监测系统相关的配置,以使其可以记录自定义事件到一个或更多的数据源。

本文接下来的部分将会详细地讲解如何完成这3个步骤。 如果你还没有看过 Examining ASP.NET 2.0's Membership, Roles, and Profile - Part 4,那么请马上去看一看,因为接下来会用到很多那篇文中的代码。


创建一个健康监测系统的自定义事件
健康监测系统内的所有事件都继承自 WebBaseEvent类。 在 System.Web.Management命名空间中,你会发现WebBaseEvent类有很多不同的子类,不同的子类中有不同类型的事件。 下图可以让你快速地了解各种事件的层次关系。 它显示了健康监测系统的一些(不是所有)内置事件。 其中暗绿色的是与安全审核相关的事件,我们将在本文中一起探讨这些事件。


因为我们想要创建一个当被锁定的用户试图登录的时候触发的事件,所以我们自然而然地想到了 WebAuthenticationFailureAuditEvent类。 通过继承一个已存在的类来创建我们的健康监测系统的自定义事件是一个非常好的办法。 在这里我们就可以创建一个继承自WebAuthenticationFailureAuditEvent的类,并用它来记录详细信息。 我们先给这个类起个名,就叫作AttemptingToLogIntoLockedAccount吧。 我们只需要写很少的代码,比如给这个类增加一些属性或方法,其它的事情都可以交给基类去处理。 比如本例中的代码就非常简单,我们不需要写任何的记录事件详细信息的方法,因为这些都在WebAuthenticationFailureAuditEvent类中实现了。 代码如下:
VB.NET
Imports  System.Web.Management
Imports  Microsoft.VisualBasic

Public   Class AttemptingToLogIntoLockedAccount
    
Inherits WebAuthenticationFailureAuditEvent

    
Public Sub New(ByVal message As String, ByVal eventSource As Object, ByVal nameToAuthenticate As String)
        
MyBase.New(message, eventSource, WebEventCodes.WebExtendedBase + 5000, nameToAuthenticate)
    
End Sub

End Class
  

C#(译者改)
using  System;
using  System.Data;
using  System.Configuration;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;

using  System.Web.Management;

/// <summary>
/// AttemptingToLogIntoLockedAccountEvent 的摘要说明
/// </summary>

public   class  AttemptingToLogIntoLockedAccountEvent : WebAuthenticationFailureAuditEvent
{
    
public AttemptingToLogIntoLockedAccountEvent(string message, object eventSource, string nameToAuthenticate)
        : 
base(message, eventSource, WebEventCodes.WebExtendedBase + 5000, nameToAuthenticate)
    
{
        
    }

}


请注意看一下代码,AttemptingToLogIntoLockedAccount类继承自WebAuthenticationFailureAuditEvent。 同时,我们还在AttemptingToLogIntoLockedAccount类中定义了一个构造函数,它有3个参数,分别是message(详细信息)、eventSource(事件源)和nameToAuthenticate(被锁定的试图登录的用户)。 然后再通过这些参数和事件代码来调用基类的构造函数。

在本系列文章之前的部分中,我们已经知道每一个事件都有一个相关联的事件代码,事件代码是一个数字类型的值。 因为健康监测系统已经有了一些预定义的事件代码, 所以,我决定让我创建的自定义事件的事件代码为一个很大的值, 具体到本例来说就是WebEventCodes.WebExtendedBase + 5000。

在本文的结尾处你可以下载到一个web站点程序,它里面包含本文所述的所有代码。 我将AttemptingToLogIntoLockedAccount类放在了程序的App_Code文件夹下。 当然,你也可以把这个类放到一个类库里,然后在web程序中引用这个类库。

注: 这里有一篇C#版本的与本文很相似的文章 How To: Instrument ASP.NET 2.0 Applications for Security。


触发AttemptingToLogIntoLockedAccount事件
我们已经为健康监测系统增加了一个自定事件,接下来就是如何触发它的问题了。 触发健康监测系统的事件是非常简单的: 创建一个事件类的实例,然后调用它的Raise()方法即可。 在我的文章 Examining ASP.NET 2.0's Membership, Roles, and Profile - Part 4中,我创建了一个Login控件的验证事件的事件处理器。 如果用户因为账号被锁定而登录失败的话就会调用这个事件处理器。 本例中,我用它来触发AttemptingToLogIntoLockedAccount事件。

触发事件的代码非常简单,如下所示:
VB.NET
Protected   Sub Login1_LoginError(ByVal sender As Object, ByVal e As System.EventArgs) Handles Login1.LoginError
   A lot of code removed 
for brevity 

  
If userInfo.IsLockedOut Then
    
'The user account is locked out!

    
'Raise the AttemptingToLogIntoLockedAccount event
    'This will record this event via ASP.NET's Health Monitoring feature

    
'First, create the event
    Dim lockedOutEvent As New AttemptingToLogIntoLockedAccount( _
                  
"Attempting to Login to a Locked Out Account!!", _
                  
Me, _
                  Login1.UserName)

    
'Now, raise it!!
    lockedOutEvent.Raise()
  
End If

   Code removed 
for brevity 
End Sub
 

C#(译者改)
using  System;
using  System.Data;
using  System.Configuration;
using  System.Collections;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;

public  partial  class  Security_Login : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    
{

    }


    
protected void Login1_LoginError(object sender, EventArgs e)
    
{
        
if (Membership.GetUser(((Login)LoginView1.FindControl("Login1")).UserName).IsLockedOut)
        
{
            AttemptingToLogIntoLockedAccountEvent lockedOutEvent 
=
                
new AttemptingToLogIntoLockedAccountEvent("被锁定的用户试图登录!!!", this, ((Login)LoginView1.FindControl("Login1")).UserName);

            lockedOutEvent.Raise();
        }

    }

}


当我们创建AttemptingToLogIntoLockedAccount对象的时候,使用“Attempting to Login to a Locked Out Account!!”作为事件信息,使用当前的ASP.NET页的实例作为事件源,使用因被锁定而登录失败的用户名作为第三个参数。 接下来调用AttemptingToLogIntoLockedAccount对象的Raise()方法。 这样,健康监测系统就会将事件记录到Web.config中指定的数据源中。

为了记录AttemptingToLogIntoLockedAccount事件,我们需要对Web.config做一些配置
我们还没有给AttemptingToLogIntoLockedAccount事件配置任何用于记录的日志源。 所以,当被锁定的用户试图登录,然后出发了这个事件的时候,该事件是不会被记录的。 为了记录AttemptingToLogIntoLockedAccount事件,我们需要对Web.config做一些配置。 下面的代码演示了健康监测系统如何记录事件到SQL Server日志源。
< configuration >
  
< system .web >
    
< healthMonitoring  enabled ="true" >
      
< eventMappings >
        
< clear />
        
<!--  Log only AttemptingToLogIntoLockedAccount events  -->
        
< add  name ="AttemptingToLogIntoLockedAccount Errors"  type ="AttemptingToLogIntoLockedAccount"  startEventCode ="0"  endEventCode ="2147483647" />
      
</ eventMappings >

      
< providers >
        
< clear />
        
<!--  Provide any customized SqlWebEventProvider information here (such as a different connection string name value  -->
        
< add  connectionStringName ="LocalSqlServer"  maxEventDetailsLength ="1073741823"  buffer ="false"  name ="SqlWebEventProvider"  type ="System.Web.Management.SqlWebEventProvider" />
      
</ providers >

      
< rules >
        
< clear />
        
< add  name ="AttemptingToLogIntoLockedAccount Default"  eventName ="AttemptingToLogIntoLockedAccount Errors"  provider ="SqlWebEventProvider"  profile ="Default"  minInstances ="1"  maxLimit ="Infinite"  minInterval ="00:00:00"  custom ="" />
      
</ rules >
    
</ healthMonitoring >

    
  
</ system.web >
</ configuration >  

向如上那样对Web.config做完配置后,一旦被锁定的用户进行登录操作的话,健康监测系统就会将相关信息记录到SQL Server数据库。 在本系列文章的第一部分中,我已经演示了如何在网页上显示日志信息。 下面的截屏出示了在网页上显示日志信息的情况,在本文结尾处你可以下载到相关代码。



结论
健康监测系统用很多预定义事件,在程序执行期间,它们会被自动地触发。 但是有些时候,你需要创建一个你自己的自定义事件,或者需要自己写代码来触发某一个已存在的事件。 创建一个自定义事件是非常简单的: 我们可以继承一个健康监测系统已有的事件类。 要触发一个事件(自定义事件或内置事件)的话,只需调用相关的类的实例的 Raise()方法即可。 之后,健康监测系统会根据Web.config中的配置来决定如何记录相关事件。


祝编程愉快!
为什么你的PROFINET IRT同步性能不达标?等时模式常见配置误区盘点 本文深入剖析了PROFINET IRT等时模式同步性能不达标的常见原因。文章直击痛点,系统盘点了从硬件兼容性、拓扑组态、过程映像分区分配,到同步OB配置、时序参数调校及带宽管理等关键环节的配置误区,并提供了实用的诊断思路与性能优化清单,帮助工程师精准定位并解决同步抖动、时序混乱等难题。 阅读详情

相关推荐

2026年ComfyUI一键部署指南:秋叶整合包安装与API批量任务实战

节点式工作流是AI图像生成领域实现高度定制化和流程自动化的核心技术范式。其原理在于将图像生成的各个步骤(如提示词编码、模型加载、采样解码等)模块化为可连接、可配置的独立节点,用户通过可视化连线构建专属生成管线。这种架构的技术价值在于突破了固定界面的限制,提供了极致的灵活性与可重复性,尤其适合复杂工作流编排和批量生产任务。在应用场景上,它广泛应用于需要精细控制生成过程的研究、定制化内容创作以及自动化图像生成流水线。本文聚焦于ComfyUI这一代表性工具,详细解析如何通过秋叶整合包实现快速本地部署,并深入演示其

weixin_29056781的博客 539

【ASP.NET Step by Step】之 开篇 Scott Mitchell

从以前用ASP.NET到现在,技术的变化真是不小! 孤陋寡闻了,昨天才知道 Scott Mitchell 这个牛人。 这个是他的简介: http://aspnet.4guysfromrolla.com/ScottMitchell.shtml Hello! My name is Scott Mitchell, and I am the editor, founder, and prim...

weixin_30580943的博客 504

R语言中如何获取前向选择(forward selection)选出的变量

前向选择是一种常用的特征选择方法,可以在给定一个预测模型的情况下,逐步添加变量来确定最佳的预测模型。在R语言中,可以使用适当的函数和库来执行前向选择,并获取选出的变量。以下是一个详细的步骤,展示了如何使用R语言执行前向选择并获得选出的变量。通过按照上述步骤,你可以使用R语言执行前向选择,并获取选出的变量。记住,前向选择是一种特征选择方法,可以根据不同的评估指标选择最佳的预测模型。接下来,准备用于前向选择的数据。使用"summary"函数查看前向选择的摘要,并使用"which"函数获取被选中的变量。

WangWEel的博客 923

用ASP.NET创建网络相册

  在现在的数码时代,我们会经常拍摄一些相片以供留念,而随着数码照片的增多,往往需要很好地管理这些照片,以便更好地查阅留念。现在网上有不少的电子相册,都能很好的实现这些功能,那我们能否自己动手创建自己的相册呢?当然可以,在这篇文章中,我们将利用asp.net,来创建一个简单的在线相册,以收藏我们的照片。  首先来看下,这个相册有哪些功能。在这个相册中,我们必须先把预先摄影好的照片放到一个目

Alinker 1466

笔试题-2023-芯原-数字前端设计or验证【纯净题目版】

笔试题-2023-芯原-数字前端设计or验证【纯净题目版】

w0shishabi的博客 5685

am62x A53与R5F通信

AM62x是Ti的一款异构多核芯片。remoteproc驱动,硬编码(写死)了R5F/M4F固件的名字,这样驱动启动时,就会找硬件编码的固件,下面是其对应关系。值得注意的是,linux内核中的M4F remoteproc驱动启动M4F,而linux内核中的R5F remoreteproc驱动不启动R5F,相反,它attach到已经在boot阶段启动的R5F固件上。在/lib/firmware的真实固件名:,而我们生成的固件名如下所示,没有直接对应的,经确认,.out文件就是我们需要的,重命名后即可。

鹰之翔 1358

How ASP.NET Web Pages are Processed on the Web Server

本文转自:http://www.4guysfromrolla.com/articles/011404-1.aspx Step 0: The Browser Makes an HTTP Request for an ASP.NET Web Page The entire process begins with a Web browser making a request for an ...

weixin_30537451的博客 963

YOLOv9改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计

实时检测器架构的轻量级设计GsConv。

Limiiiing的博客 1364

ASP.NET开发资源

Asp.Net今天是一个WEB开发广泛使用的框架,主要是使用CSS,HTML和JavaScript的。我的许多朋友是Web开发人员使用ASP.NET网站开发。他们总是在互联网上寻求新的资源,为保持自我更新与虚拟环境的不断变化的特点。 他们大多是寻找不同的和灵感的资源,因为他们面对不同的挑战,同时建立一个网站。为了使网站反映客户的想象力是至关重要的,因此,人们每天学习新的东西,并保持试验。 下面...

爱码农爱生活 203

Amazon SES 移出沙盒完整指南 & 高通过率模板

AWS SES沙盒模式转正式模式申请指南 申请正式模式需通过AWS审核,常见被拒原因包括邮件用途不清晰、缺少退订机制或发送量不合理。人工申诉需登录AWS Support Center提交服务限额提升请求,填写详细的公司信息、邮件用途及合规措施。 高通过率申诉模板需包含: 公司信息:名称、网址及与AWS的合作情况。 邮件规范:明确类型(交易/营销)、退订链接及退信处理机制。 发送计划:合理预估发送量,确保合规。 关键点:真实信息、用途清晰、退订机制完善、发送量合理。首次被拒可修改后重新提交。

xianyinsuifeng的博客 326

华为OD机试 - 小扇和小船的数字游戏 - 二进制(Python/JS/C/C++ 2024 C卷 200分)

二进制表示:任何数 n 的二进制表示中,要找到下一个有相同数量的1的数,我们需要在最低位的0后面的最低位的1进行操作。右侧交换法则:找到右侧的第一个0,位于第一个1的左边,将这个0变成1(提升这个位),并将这个1变成0(下移这个位)。调整尾部1:为了得到最小的数,将所有低于已交换的1的位重置,使得所有1尽可能靠右。

学Java,找哪吒 1160

[翻译]ASP.NET Web页面是如何在Web服务器端产生的

原文链接:http://aspnet.4guysfromrolla.com/articles/011404-1.aspx 作者:Scott Mitchell 简介 你是否仔细地想过当一个Asp.net Web页面请求到达服务器的时候,服务器端发生了什么?服务器是如何处理到来的请求的?发送给浏览器的HTML是怎么产生的?开发者可能会用什么机制去处理不同阶段的请求呢?这篇文章将对服务器...

weixin_34281477的博客 595

迟滞电压比较器电路的原理与计算

迟滞电压比较器是一种具有双阈值特性的电路,通过正反馈机制实现抗噪声干扰功能。文章详细分析了其工作原理,包括同相型和反相型两种结构的电压阈值计算与电阻设计方法,并提供了已知门限求电阻和已知电阻求门限的推导公式。工程应用中需注意输出类型匹配、电阻取值范围、噪声裕量设计等问题。该比较器在信号处理、波形转换等场景中具有重要应用价值,设计时需综合考虑供电电压、参考电压和噪声特性等因素。

硬核科技 2672

磁链:电机控制的核心状态量与实时观测方法

磁链是表征电机绕组中电磁能量耦合的关键状态量,本质为磁通与匝数的乘积,具有明确的拓扑性和方向性。其动态行为直接决定转矩生成与能量传递效率,是FOC、DTC、MPC等先进控制策略的共同物理基础。在工程实践中,磁链无法直测,需通过电压模型与电流模型融合估算,并依赖高精度电流/电压采样、在线参数辨识及龙伯格观测器等技术实现鲁棒实时观测。准确的磁链观测支撑了高性能驱动、能效优化乃至轴承故障预警等跨领域应用,已成为现代电机控制系统设计与调试的底层核心。

weixin_34417200的博客 423

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[翻译]ASP.NET 2.0中的健康监测系统(Health Monitoring)(2) - 通过Email发送监测信息

原文地址:http://aspnet.4guysfromrolla.com/articles/032107-1.aspx[原文源码下载][译者改后源码下载][翻译]ASP.NET 2.0中的健康监测系统(Health Monitoring)(2) - 通过Email发送监测信息原文发布日期:2007.03.21作者:Scott Mitchell翻译:webabcd介绍ASP.NET 2.0

webabcd的专栏 1423

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

[翻译]ASP.NET 2.0中的健康监测系统(Health Monitoring)(1) - 基本应用

     摘要: ASP.NET 2.0内置的健康监测系统可以非常容易地使指定的事件自动地记录到指定的日志源。 本文中,我们研究了两种内置日志源:“EventLogProvider”和“SqlWebEventProvider”,它们会分别记录事件信息到Windows的事件日志中和SQL Server数据库的一个表里。 健康监测系统可以捕获自定义事件,也可以使用其它日志源。 在后面的文章中,我们将会...

yanhuanwang 101

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ASP.NET 2.0中的健康监测系统(Health Monitoring)

ASP.NET 2.0中的健康监测系统(Health Monitoring)(2) - 通过Email发送监测信息原文发布日期:2007.03.21作者:Scott Mitchell翻译:webabcd介绍ASP.NET 2.0的健康监测系统是用来监测运营环境中ASP.NET程序的运行状况的。 它的工作就是记录事件信息到指定的日志源。 .NET 2.0框架中包含有多种可以被健康监测系统使用的内置事...

weixin_30360497的博客 260

[翻译]ASP.NET 2.0中的健康监测(Health Monitoring)(2) - 通过Email发送监测信息

     摘要: .NET 2.0框架中的健康监测系统中,不但可以监测到程序的lifetime事件和与错误相关的事件,而且还可以监测到安全审核成功或失败的事件。 本文中,我们一起探讨了WebAuthenticationFailureAuditEvent事件,在验证失败的时候就会触发它。如果用户用无效的信息登录系统,那么实现Membership的Provider就会触发这个事件。 例如,SqlMem...

yanhuanwang 349

[翻译]ASP.NET 2.0中的健康监测系统(Health Monitoring)(2) - 通过Email发送监测信息...

原文地址:http://aspnet.4guysfromrolla.com/articles/032107-1.aspx[原文×××][译者改后×××] [翻译]ASP.NET 2.0中的健康监测系统(Health Monitoring)(2) - 通过Email发送监测信息 原文发布日期:2007.03.21作者:Scott Mitchell翻译:webabcd介绍AS...

weixin_33991727的博客 502

考察ASP.NET 2.0Membership,Roles,Profile - Part 1

 本文英文原版及代码下载:http://aspnet.4guysfromrolla.com/articles/120705-1.aspx考察ASP.NET 2.0Membership,Roles,Profile - Part 1 导言:很多网站都有一个共同点:提供用户帐号(user accounts),这些网站允许(或需要)访问者创建帐号以使用特定的功能.比如ASPMessageboa

heker2007的专栏 3336

UEditor新增自定义按钮(获取光标停留的位置,然后插入一个内容)

在使用编辑器时,希望在工具栏加一个标签,点击标签就能在编辑器里面添加某个元素。 我遇到的问题是加上{***}这样的特殊字符。这个功能是编辑器本身没有的。 1.在ueditor.config.js中找到toolbars的数组,并在数组中添加一个你需要新增的按钮功能名称如下图所示  2.在zh-cn.js 中找到labelMap并添加如下图所示,主要是用于鼠标放置上去显示的文字提示内容 ...

肖肖肖丽珠的博客 8271

[翻译]开发自己的web站点管理工具(Website Administration Tool)(2)

原文地址:http://aspnet.4guysfromrolla.com/articles/053007-1.aspx [原文源码下载][翻译]开发自己的web站点管理工具(Website Administration Tool)(2)原文发布日期:2007.05.30作者:Dan Clem翻译:webabcd介绍为了方便管理用户、角色和权限设置,ASP.NET 2.0内置了Web Si

webabcd的专栏 945
上一篇: 新瓶旧酒ASP.NET AJAX(10) - 客户端脚本编程(Sys.Services命名空间下的类)
下一篇: ASP.NET 2.0中的友好CSS控件适配器的应用 - 用ul、li呈现CheckBoxList和RadioButtonList
webabcd
博客等级 码龄17年 28粉丝 911原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值