在ASP.NET中实现通用的有效性校验

不管在B/S还是C/S中,数据操纵维护与检索,很多时候,都需要判断用户录入信息的有效性。在B/S结 构中,可能还要考虑Sql注入的安全性问题。

既然问题很普遍,我们就应该对该问题进行业务抽象,得到统一的处理方案。在此介绍我们的处理方 式,用于实现在ASP.NET中使用C#语言实现的通用有效性检验。

我们将整个处理方案分为三部分:

1、格式化数据有效性判断,这一部分应该致力做到框架结构的无关性,也就是说,应该做到不管是 C/S结构还是B/S结构,都应该是通用的;数据安全性判断,既然是安全性考虑,原则上B/S和C/S结构也是 通用的,比如Sql 注入的安全性;

2、处于友好的交互性和友好的接口,提供一个容易理解的调用接口和非法提醒是必要的。这是构架相 关的,在Web开发和WinForm开发各自有所不同的处理方式。既然标题是ASP.NET中的有效性检验,我们只 讨论Web方式的接口。

3、页面调用,既然是页面调用,当然是基于Web的。

第一部分:框架通用性

对于框架无关的部分,应该考虑放在一个基类中,我们也是这样做的,不妨我们放在积累命名空间为 fsCSharpDevFrk.Common的fsDevCommon类中。其中实现格式话数据有效性判断的方法如下:

    public bool CheckValidValue(string strValue, string strTypeFormat)
    {
      bool bReturn = true;
  
      if (strTypeFormat != null && strTypeFormat.Length > 0)
      {
        if (strTypeFormat.StartsWith("D"))
        {
          string[] strTypes = strTypeFormat.Split(',');
          if (strTypes.Length > 1)
          {
            DateTime dtValue = new DateTime(1900, 1, 1), dtMaxValue = new 

DateTime(2050, 12, 31);
            if (strTypes.Length > 2 && IsDate(strTypes[2]))
              dtValue = DateTime.Parse(strTypes[2]);
            if (strTypes.Length > 3 && IsDate(strTypes[3]))
              dtMaxValue = DateTime.Parse(strTypes[3]);
  
            if (strTypes[1].Trim() == ">")
              bReturn = IsDigital(strValue) && (DateTime.Parse

(strValue) > dtValue);
            else if (strTypes[1].Trim() == ">=")
              bReturn = IsDigital(strValue) && (DateTime.Parse

(strValue) >= dtValue);
            else if (strTypes[1].Trim() == "<")
              bReturn = IsDigital(strValue) && (DateTime.Parse

(strValue) < dtValue);
            else if (strTypes[1].Trim() == "<=")
              bReturn = IsDigital(strValue) && (DateTime.Parse

(strValue) < dtValue);
            else if (strTypes[1].Trim() == "=")
              bReturn = IsDigital(strValue) && (DateTime.Parse

(strValue) == dtValue);
            else if (strTypes[1].Trim().ToUpper() == "BETWEEN")
              bReturn = IsDigital(strValue) && (DateTime.Parse

(strValue) >= dtValue) && (DateTime.Parse(strValue) <= dtMaxValue);
          }
          else
            bReturn = IsDate(strValue);
        }
        else if (strTypeFormat.StartsWith("T"))
        {
          string[] strTypes = strTypeFormat.Split(',');
          if (strTypes.Length > 1)
          {
            DateTime dtValue = new DateTime(1900, 1, 1), dtMaxValue = new 

DateTime(2050, 12, 31);
            if (strTypes.Length > 2 && IsDateTime(strTypes[2]))
              dtValue = DateTime.Parse(strTypes[2]);
            if (strTypes.Length > 3 && IsDateTime(strTypes[3]))
              dtMaxValue = DateTime.Parse(strTypes[3]);
  
            if (strTypes[1].Trim() == ">")
              bReturn = IsDateTime(strValue) && (DateTime.Parse

(strValue) > dtValue);
            else if (strTypes[1].Trim() == ">=")
              bReturn = IsDateTime(strValue) && (DateTime.Parse

(strValue) >= dtValue);
            else if (strTypes[1].Trim() == "<")
              bReturn = IsDateTime(strValue) && (DateTime.Parse

(strValue) < dtValue);
            else if (strTypes[1].Trim() == "<=")
              bReturn = IsDateTime(strValue) && (DateTime.Parse

(strValue) < dtValue);
            else if (strTypes[1].Trim() == "=")
              bReturn = IsDateTime(strValue) && (DateTime.Parse

(strValue) == dtValue);
            else if (strTypes[1].Trim().ToUpper() == "BETWEEN")
              bReturn = IsDateTime(strValue) && (DateTime.Parse

(strValue) >= dtValue) && (DateTime.Parse(strValue) <= dtMaxValue);
          }
          else
            bReturn = IsDateTime(strValue);
        }
        else if (strTypeFormat.StartsWith("N"))
        {
          string[] strTypes = strTypeFormat.Split(',');
          if (strTypes.Length > 1)
          {
            long lValue = 0, lMaxValue = 99999999999999;
            if (strTypes.Length > 2 && IsDigital(strTypes[2]))
              lValue = long.Parse(strTypes[2]);
            if (strTypes.Length > 3 && IsDigital(strTypes[3]))
              lMaxValue = long.Parse(strTypes[3]);
  
            if (strTypes[1].Trim() == ">")
              bReturn = IsDigital(strValue) && (int.Parse(strValue) 

> lValue);
            else if (strTypes[1].Trim() == ">=")
              bReturn = IsDigital(strValue) && (int.Parse(strValue) 

>= lValue);
            else if (strTypes[1].Trim() == "<")
              bReturn = IsDigital(strValue) && (int.Parse(strValue) 

< lValue);
            else if (strTypes[1].Trim() == "<=")
              bReturn = IsDigital(strValue) && (int.Parse(strValue) 

< lValue);
            else if (strTypes[1].Trim() == "=")
              bReturn = IsDigital(strValue) && (int.Parse(strValue) == 

lValue);
            else if (strTypes[1].Trim().ToUpper() == "BETWEEN")
              bReturn = IsDigital(strValue) && (int.Parse(strValue) 

>= lValue) && (int.Parse(strValue) <= lMaxValue);
          }
          else
            bReturn = IsDigital(strValue);
        }
        else if (strTypeFormat.StartsWith("F"))
        {
          string[] strTypes = strTypeFormat.Split(',');
          if (strTypes.Length > 1)
          {
            double dValue = 0, dMaxValue = 999999999;
            if (strTypes.Length > 2 && IsNumeric(strTypes[2]))
              dValue = double.Parse(strTypes[2]);
            if (strTypes.Length > 3 && IsDigital(strTypes[3]))
              dMaxValue = long.Parse(strTypes[3]);
  
            if (strTypes[1].Trim() == ">")
              bReturn = IsNumeric(strValue) && (double.Parse(strValue) 

> dValue);
            else if (strTypes[1].Trim() == ">=")
              bReturn = IsNumeric(strValue) && (double.Parse(strValue) 

>= dValue);
            else if (strTypes[1].Trim() == "<")
              bReturn = IsNumeric(strValue) && (double.Parse(strValue) 

< dValue);
            else if (strTypes[1].Trim() == "<=")
              bReturn = IsNumeric(strValue) && (double.Parse(strValue) 

< dValue);
            else if (strTypes[1].Trim() == "=")
              bReturn = IsNumeric(strValue) && (double.Parse(strValue) 

== dValue);
            else if (strTypes[1].Trim().ToUpper() == "BETWEEN")
              bReturn = IsNumeric(strValue) && (double.Parse(strValue) 

>= dValue) && (double.Parse(strValue) <= dMaxValue);
          }
          else
            bReturn = IsNumeric(strValue);
        }
        else if (strTypeFormat.StartsWith("C"))
        {
          string[] strTypes = strTypeFormat.Split(',');
          if (strTypes.Length > 1)
          {
            string strVal = "", strMaxValue = "";
            if (strTypes.Length > 2 && strTypes[2] != null && 

strTypes[2].Length > 0)
              strVal = strTypes[2];
            if (strTypes.Length > 3 && strTypes[3] != null && 

strTypes[3].Length > 0)
              strMaxValue = strTypes[3];
  
            if (strTypes[1].Trim() == ">")
              bReturn = IsNumeric(strValue) && (strValue.CompareTo

(strVal) > 0);
            else if (strTypes[1].Trim() == ">=")
              bReturn = IsNumeric(strValue) && (strValue.CompareTo

(strVal) >= 0);
            else if (strTypes[1].Trim() == "<")
              bReturn = IsNumeric(strValue) && (strValue.CompareTo

(strVal) < 0);
            else if (strTypes[1].Trim() == "<=")
              bReturn = IsNumeric(strValue) && (strValue.CompareTo

(strVal) <= 0);
            else if (strTypes[1].Trim() == "=")
              bReturn = IsNumeric(strValue) && (strValue.CompareTo

(strVal) == 0);
            else if (strTypes[1].Trim().ToUpper() == "BETWEEN")
              bReturn = IsNumeric(strValue) && (strValue.CompareTo

(strVal) >= 0) && (strValue.CompareTo(strMaxValue) <= 0);
            else if (strTypes[1].Trim().ToUpper() == "IN")
            {
              if (strVal.Length > 0)
              {
                if (strMaxValue.Length > 0)
                  bReturn = IsExists(strValue, StringSplit(strVal, 

strMaxValue));
                else
                  bReturn = strValue.IndexOf(strVal) >= 0;
              }
              else
                bReturn = false;
            }
          }
        }
      }
  
      return bReturn;
    }

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索parse
, datetime
, c/s框架
, else
, Trim
isdigit
,以便于您获取更多的相关知识。

时间: 2025-01-02 02:11:10

在ASP.NET中实现通用的有效性校验的相关文章

ASP项目中的通用条件查询模块

一.提出问题:    在大型的ASP项目中,都涉及到了条件查询这一功能.用户要求能够针对特定的字段进行查询.对于有些数据,是从多个表取出来的,因此也要能对多个表进行查询.    一般的话,大多数的做法就是每个程序都做一个查询功能,因为每个查询的表都不同,涉及的字段也不同.但是,如果在大型的ASP项目中这么做的话,不仅增加了工作量.影响开发进度,而且不能使系统模块化.代码复用,增加了系统维护难度.因此,我们有必要使条件查询模块化. 二.解决思路:    我们设计条件查询的功能为:    1.选择查

Asp.net中如何处理一个站点不同Web应用通用Session的问题

asp.net|session|web|问题|站点 Asp.net中如何处理一个站点不同Web应用通用Session的问题 1.问题描述: 系统S中有M1,M2,M3,M4四个模块,每个模块都是一个web应用.其中一个模块中设置Session后在其他模块中无法读取. 2.问题原因: 一个WEB应用相当于一个站点,应用与应用之间不可能共享Session. 3.解决方法: 1) 将四个web应用包含在同一个解决方案中,如图所示: 实际目录存储结构如下: (注:调整.webinfo文件使解决方案能构正

在ASP中实现通用的绝对路径生成方法

在我开发ASP + Access的Web应用时,都会遇到数据库文件路径的定位问题.如果在自己的计算机上实现时可以直接指定了事,但如果做的项目要上传到别的服务器或移动别的机器上运行使用,每次都要把这个路径改来改去的话显得有些繁锁,下面结合我做这个网站的经验来解决这个问题,让我们可以"一劳永逸". 在ASP中使用Server.MapPath("file.asp")语句后,会返回该文件在本地驱动器上的绝对路径,如"D:\MySite\test\file.asp&

Asp.net中图片存储数据库以及页面读取显示通用方法详解

前端碰到对在一个系统遇到流程控制中需要存储在数据库存储一个签名图片的问题-一 直控制不好, 今天特别关于这个问题详细看了一下.其实这个问题网上资源还是相当多的, 但问题是过于凌乱 资料残缺不全 甚至我感觉其中有相当的一部分会对读者产生一些误导 .对于Asp.net中存储图片我在08年一月份就做了一个详细解决方案,今天在这个基础主要 对一些细节控制上以及页面显示上做了完善,详细步骤如下: 首先声明一下开发环境:VS2008+SQL2005数据库+.NET FrameWork 3.5版本 (1)存储

ASP.NET中实现大结果集分页研讨

asp.net|分页 在Web应用程序中,对一个大数据库结果集进行分页已经是一个家喻户晓的问题了.简单的说,你不希望所有的查询数据显示在一个单独的页面中,所以带有分页的显示才是更合适的.虽然在传统的asp里这并不是一个简单的任务,但在asp.net中,DataGrid控件把这一过程简化为只有几行代码.因此,在 asp.net中,分页很简单,但是默认的DataGrid分页事件会从数据库中把所有的记录全部读出来放到asp.net web应用程序中.当你的数据在一百万以上的时候,这将引起严重的性能问题

Asp.net中创建和使用Ado.net

ado|asp.net|创建     在商业应用程序中最重要的组件是数据,无论是在线的商务应用程序.公司的企业软件还是小型公司的会计应用程序无不如此:通过一个通用的线程与数据打交道,即都必须实现快速.有效.可靠的方式存储.检索和处理数据.      然而,一直一来令人棘手的问题是这些数据文件常以不同的格式存储,这就需要开发者学会用多种不同的方式来处理完全一样的事情.Microsoft等诸多数据提供者力求实现数据访问格式的标准化.      从Odbc的出现到Dao.Rdo.Oledb.Ado的实

绝对酷,如何解决asp.net中javascript脚本的问题(使用服务器控件执行客户端脚本)

论坛中很多人问如何在asp.net中新开一个没有工具栏等等的窗口,大家都说用javascript解决,不错这件事实可以解决了,但是使用通用html control但是就不能用asp.net代码操作他了现在我就为大家解决这个难题. 创建一个窗口新开一个窗口的程序我向大家一定非常熟悉了,简单说一下window.open(url, [name], [features])url是要打开窗口的地址name是新开窗口的名称features是新开窗口的一些属性,例如尺寸等 打开窗口利用服务器属性最简单的把客户

在ASP.NET中使用非托管COM组件

asp.net|托管     众所周知,ASP.net是基于通用语言运行库创建的,也就是所谓的托管执行环境.生成的代码称为托管代码.编译器能够从源代码的描述中产生元数据信息,而运行库又从元数据中获得托管代码的信息.而我们编写的组件一般是在非托管环境下创建的,这些组件往往不包含元数据信息,那么我们怎么在托管代码中使用这些元数据信息呢?      为了在托管环境中使用非托管代码,我们首先必须手工为这些现有的组件产生元数据信息 .必须有一种工具能够产生元数据.能够从某个地方获得元数据.这个元数据的发源

在Asp.net中如何实现弹出提示对话框

asp.net|对话框 C#中,弹出窗口的代码为: MessageBox("用户名或密码错误!","错误:"); 而在Asp.net中,则不可以用这种方法了,这时我们可以写一个类Message(名字随便取),内容如下: //---------------------------------------//作者:明天去要饭//QQ:305725744//--------------------------------------- using System; name