28.有些数据字段在程序控制中一般以1,2,3,4..等等进行判断,但是为了增强程序的易读性,需要使用enum将其所代表的意思表达出来,
可以单独做一个类来实现这个功能
如:
namespace enumDemo
{
public enum RightEnum
{
//组,用户,角色维护
GroupEdit=1,
//功能项维护
FunctionEdit=2,
//权限点维护
RightEdit=3,
}
}
引用时,直接用RightEnum.GroupEdit即代表1,这样会使程序更清晰。
29.弹出页返回时对上级页界面控件的编程
dialogArguments.document.all.txtOriginRecord.value="none";
30.在单元格中检索按钮的onmouseover onmouseout事件的编程:
<TD align="right"><INPUT class="smbuttonStyle" id="Submit1" onmouseover="blackFont(this)";" onmouseout="whiteFont(this);"
type="submit" value="检索" name="submitb" runat="server" ></TD>
脚本程序:
function blackFont(param){
var blackVar = '#000000';
try
{
if(!document.layers){
param.style.color=blackVar;
}
}
catch(e)
{}
}
31.几种常用的快捷键
Ctrl+A:全选
Ctrl+S:保存
Ctrl+F:查找
Ctrl+Z:撤销
F5:启动调试
F10:单步调试,不进入下级函数体
F11:单步调试,进入下级函数体
F7: 页面和后台代码页的切换
F1:帮助
32.获取服务器上虚拟应用程序根路径: Context.Request.ApplicationPath
例如在web项目test下有一个Default1.aspx和一个Default2.aspx页面
则从Default1.aspx跳转到Default2.aspx的代码为:
Response.Redirect(Context.Request.ApplicationPath+"Default2.aspx");
33.一个实用的加密函数
public static string Encrypt(string pToEncrypt, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
//把字符串放到byte数组中
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
//建立加密对象的密钥和偏移量
//原文使用ASCIIEncoding.ASCII方法的GetBytes方法
//使得输入密码必须输入英文文本
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
//Write the byte array into the crypto stream
//(It will end up in the memory stream)
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
//Get the data back from the memory stream, and into a string
StringBuilder ret = new StringBuilder();
foreach(byte b in ms.ToArray())
{
//Format as hex
ret.AppendFormat("{0:X2}", b);
}
ret.ToString();
return ret.ToString();
}
34.一个解密字符串:
public static string Decrypt(string pToDecrypt, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
//Put the input string into the byte array
byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
for(int x = 0; x < pToDecrypt.Length / 2; x++)
{
int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
inputByteArray[x] = (byte)i;
}
//建立加密对象的密钥和偏移量,此值重要,不能修改
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
//Flush the data through the crypto stream into the memory stream
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
//Get the decrypted data back from the memory stream
//建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象
StringBuilder ret = new StringBuilder();
return System.Text.Encoding.Default.GetString(ms.ToArray());
}
35.程序中加密调用:Person.PerPwd = Security.Encrypt(this.PerPwd.Text, "&!#-?,:*");
采用这种方法可以把加密后的字符串保存到数据库中,即使有人看到数据库也是一个加密后的字符串,增强了系统的安全性。
36.HTML页面中引用.css文件
<LINK href="../css/main.css" type="text/css" rel="stylesheet">
注意"../"的写法如果要引用css的页面为A页面,则../表示A页面的上一级目录
37.StringBuilder的用法
StringBuilder sb=new StringBuilder();
sb.Append("1=1");
if(this.SearchValue.Text!="")
{
sb.AppendFormat("and {0} like '%{1}%'",this.SearchType.SelectedValue,this.SearchValue.Text);
}
38.判断一个字符串是否属于另一个字符串一部分
string temp="chinese";
int flag=temp.IndexOf("ese")
则 flag=4 ("ese"字符串在temp中的位置)
如果 int flag=temp.IndexOf("iceworld");
则 flag=-1("iceworld"不属于temp字符串的一部分)
39.获取与服务器上虚拟路径相对应的物理文件路径
string s1=DateTime.Now.ToString("yyyyMM"); (200612)
string s2=DateTime.Now.ToString("dd"); (29)
path=Server.MapPath("/book/upload/"+s1+"/"+s2);
if(!Directory.Exists(path))
{
DirectoryInfo di=Directory.CreateDirectory(path);
}
40.再编程中可能会出现错误,不同的错误提示的信息不同,有些很难懂,我们可以在一个类中专门对一些常见的错误进行处理。
如在ExceptionHandler类中定义这个的函数
pullic static string DealError(string errmsg)
{
if(errmsg.IndexOf(Index was outside the bounds of the array.">=0)
{
return "数组超界,请检查!";
else if( errmsg.IndexOf("There is no row at position 0")>=0)
{
return "第0行没有数据!";
}
}
}
这样在程序中为了方便读取异常信息,可以这样写
string result=semiManage.Update();
Response.Write("<script>alert('"+ExceptionHandler.DealErrorMsg(result)+"')</script>");
41.对于一些公用的函数,我们可以也单独建一个类进行集中处理
1.安全转换字符串为数字
public static decimal ConvertToNum(object obj)
{
try
{
return Convert.ToDecimal(obj);
}
catch
{
return 0;
}
}
2.格式化数字
public static string FormatDecimal(string NumString)
{
try
{
decimal tempvalue=Convert.ToDecimal(NumString);
return tempvlue.ToString("0.####");
}
catch
{
return "";
}
}
3.格式化日期
public static string FormatDate(string DateString)
{
try
{
DateTime tempvalue=Convert.ToDateTime(DateString);
return tempvalue.ToString("yyyy-MM-dd");
}
catch
{
return "";
}
}
4.格式化字符串函数
public string FormatString(string str)
{
if(str!=null)
{
str=str.Trim();
str=str.Replace("'","’")
str=str.Replace("|","");
}
return str;
}
5.检查字符串是否是合法数字
public static bool IsNumber(string NumString)
{
return Regex.IsMatch(NumString,"^//d+(?://.//d+)?$");
}
其中Regex属于System.Text.RegularExpressions这个命名空间
42.为了系统安全,用户长时间不使用系统以致session过期时,需要重先登陆才能继续使用系统
可以让每个页面继承一个基类BasicPage,基类中进行如下编码
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
this.Load+=new System.EventHandle(this.MainPage_Load);
}
private void MainPage_Load(object sender,System.EventArgs e)
{
if(Context.User.Identity.IsAuthenticated)
{
}
else
{
Response.Redirect("~/Login.aspx");
}
}
43.在类的组织中,如果有些类有公用的一些方法,可以抽象出一个基类,让其它类都继承这个基类,也可以再为基类定义一个接口,
便于实现多重继承;简单介绍一下一种多重继承方法。
A基类--A接口--A类
A基类--B接口--B类
AB类: A基类,A接口,B接口
注意在AB类的构造函数中需要实例化A,B两个类,则可以调用AB中的方法。
44.验证一个TextBox(例如名字为txtName)为必须输入或者限定其某种输入格式的方法
添加一个RegularExpressionValidator,然后指定其ControlToValidate的属性为txtName,
ErrorMessage显示如果输入出错时提示的信息;validationExpression属性如果不填,将对输入是否为空进行校验;
如果输入一个正则表达式,则如果输入格式有误,会提示错误信息。
45.对用户输入的字符串进行加密
string password=FormsAuthentication.HashPasswordForStoringInConfigFile(this.Password.Text,"MD5");
其中 FormsAuthentication类属于System.Web.Security命名空间。
46.DataGrid中删除一条记录时,要实现立即刷新并且有相应删除提示(下边为Favorite.aspx页面的部分html代码)
可以增加一个模版列
<asp:TemplateColumn HeaderText="修改">
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<ItemTemplate>
<asp:HyperLink NavigateUrl='<%# "/Company/Chance/Favorite.aspx?type=DEL&Info_ID="+DataBinder.Eval(Container.DataItem,"Info_ID") %>' Runat="server" ID="Hyperlink1">
删除
</asp:HyperLink>
</ItemTemplate>
</asp:TemplateColumn>
然后在后台进行处理
if(Request.QueryString["type"].ToUpper() == "DEL")
this.DelFavorite();
在DelFavorite()函数中通过int Info_ID = Int32.Parse(this.operate.FormatString(Request.QueryString["Info_ID"].ToString()));
获取的ID就能够删除这一条记录并给出相应提示信息。
47.
Request.ServerVariables("Path_Info")
客户端提供的路径信息
Request.ServerVariables("Remote_Addr")
发出请求的远程主机的IP地址
Response.Redirect(Request.ServerVariables["PATH_INFO"]);
通过上面这种方式可以实现刷新本页面功能。
48.cs结构程序中的假进度条
在主要处理函数开始处定义
int roll=0;
在主函数处理环节中
if(roll%2==0)
{
this.ProgressBar(5000);
}
结尾处
roll++;
if(roll==100)
{
roll=0;
}
private void ProgressBar(int count)
{
progressBar.Value=1;
progressBar.Minimum=1;
progressBar.Maximum=count;
for(int step=1;step<count;step++)
{
progressBar.Value =step;
}
}
这样主函数每执行两遍,会将进度条滚动一次,提示用户程序正在处理中。
49.从xml中取出相应信息(bak.config)
<?xml version="1.0"?>
<ProjectConnection>
<Project name="源数据库" select="true" remark="">
<BasiceData>server=10.210.5.184;database=cgHott;uid=cghot;pwd=5656;Pooling=true;Max Pool Size=10;Min Pool Size=0;Connection Lifetime=300;packet size=1000</BasiceData>
<BasiceData>server=10.210.5.154;database=cgHott;uid=cghot;pwd=565;Pooling=true;Max Pool Size=10;Min Pool Size=0;Connection Lifetime=300;packet size=1000</BasiceData>
</Project>
</ProjectConnection>
后台cs代码
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.Load("bak.config");
System.Xml.XmlNode root = doc.DocumentElement;
System.Xml.XmlNode target = root.SelectSingleNode("descendant::Project[@name='源数据库']");
strChecked = target.Attributes["select"].Value;
string strCon=target.ChildNodes[0].InnerXml;
则能够取到 strCon="10.210.5.184;database=cgHott;uid=cghot;pwd=5656;Pooling=true;Max Pool Size=10;Min Pool Size=0;Connection Lifetime=300;packet size=1000"
50.向xml文件中写入数据
strData为需要写入的字符串
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.Load("bak.config");
System.Xml.XmlNode root = doc.DocumentElement;
System.Xml.XmlNode target = root.SelectSingleNode("descendant::Project[@name='源数据库']");
if( target != null )
{
target.ChildNodes[0].InnerXml = strData;
System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter("bak.config",null);
writer.Formatting = System.Xml.Formatting.Indented;
doc.Save(writer);
writer.Close();
}