第五十七讲 ASP.NET项目实战(四)

* 摘要
。软件开发流程
。编码规范
。常用代码
。ASP.NET编程技巧
。编码实战

* 编码规范
。代码具有良好的可读性,是程序员基本的素质需求
。代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定
。良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作
。《C#编码规范》

* ASP.NET编程技巧
。在使用Visual Studio.NET时,除直接或非引用的对象外,不要使用缺省的名字。
。即使不使用Visual Studio.NET进行编程,使用代码支持文件也有利于提高应用程序的性能
。尽理减少表单回送。可以利用IsPostBack特性来完成这一功能。在网页第一次加载时,该属性的值是false。如查网页因回送而被重新加载,IsPostBack属性就会被设置为true。
。当进行大量的字符串操作时,使用StringBuilder类就是一种比较好的选择了。
。每种服务器端控件都会消耗服务器上的资源。另外,除非控件、网页或应用程序明确地禁止ViewState,控件的状态是包含在ViewState的隐藏域中

,并在每次回送中都会被传递,这会引起严重的性能下降。
。当用户点击控件时,HyperLink控件会立即将用户“导航”到目标URL,表件不会回送到服务器上。LinkButton控件则首先将表件发回服务器,然后

将用户导航到目标URL。
。注释代码习惯。
。使用trace方法和trace属性记录Page目录中网页的执行情况。
。使用存储过程,它以接收输入参数,使一个单一的存储过程能够处理较大范围的特定的查询。因为它是预先被解析的,对于复杂的查询更显得重要

,其查询计划是预先优化的,因此调用查询过程比执行相同功能的SQL语句速度要快得多。
。使用.NET命令行。aspnet_regiis的使用。


* 常用代码
1、打开新的窗口并传送参数
//传送参数
response.write("<script>window.open('*.aspx?id="+this.DropDownList1.SelectIndex+"&id1="+*"')</script>")
//接收参数
string a=Request.QueryString("id");
string b=Request.QueryString("id1");

2、为控件添加客户端事件
myDeleteButton.Attributes.Add("onclick","return confirm('您真的要删除吗?');");

3、DataGrid代码

4、WebConfig代码
在</system.web>后添加代码如下:
<appSettings>
<add key="dsn" value="server=(local);database=testDataBase;userid=sa;password=111" />
</appSettings>

5、数据集的操作
DataSet dsUntyped=new DataSet();//声明数据集
DataTable dtOne=new DataTable("One");//声明数据表
dsUntyped.Tables.Add(dtOne);//把数据表添加到数据集
dtOne.Columns.Add("MasterID",typeof(int));//为表添加列
dtOne.columns.Add("MasterValue",typeof(string));
//给表添加记录
DataRow dr=dsUntyped.Tables["One"].NewRow();//声明一个行
dr["MasterID"]=1;//为该行的指定的列赋值
dr["MasterValue"]="One";
dsUntyped.Tables["One"].Rows.Add(dr);//把该行添加到表中。

6、数据集和字符串的转换
有时候,我们需要把一个数据集保存在数据库的一个字段中,提供这种转换就是为了达到这个目的。
DataSet StringToDataSet(string str)
{
 System.IO.StringBuilder sr=new System.IO.StringBuilder(str);
 DataSet dsC=new DataSet();
 dsC.ReadXml(sr);
 return dsC;
}

string DataSetToString(DataSet ds)
{
 string str=ds.GetXml();
 return str;
}

7、数据库的执行Insert_Update_Delete语句
public int ExecuteSql(string strSQL)
{
 string strConn=ConfigurationSettiong.AppSettings["dsn"];
 SqlConnection myCn=new SqlConnection(strConn);
 SqlCommand myCmd=new SqlCommand(strSQL,myCn);
 try
 {
  myCn.Open();
  myCmd.ExecuteNonQuery();
  return 0;
 }
 catch(System.Data.SqlClient.SqlException e)
 {
  throw new Exception(e.Message);
 }
 finally
 {
  myCmd.Disponse();
  myCn.close();
 }
}

8、验证
\s{6,10} 为6-10位字符
\d{5} 5位整数
.*[@#$^&*/].* 口令必须包含@#$^&*/中的一个
[a-zA-Z]{6,10} 口令必须由6-10个字母组成

^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]

\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|

[3579][26])00))-0?2-29-))$
日期


9、用户登录参考代码
void Login()
{
 string strConn=ConfigurationSettings.AppSettings["dsn"];
 SqlConnection myCn=new SqlConnection(strConn);
 String StrSQL="Select * from tbUserInfo where UserName='"+tbUserName.Text.Trim()+"' and UserPass='"+tbUserPass.Text.Trim()+"'";
 SqlCommand myCmd=new SqlCommand(strSQL,myCn);
 myCon.Open();
 SqlDataReader myRd=myCmd.ExecuteReader();
 int i=0;
 while(myRd.Read())
 {
  i++
  Session["UserName"]=myRd.GetString(1);
  Session["UserPass"]=MyRd.GetString(2);
 }
 myCn.Close();
 if(i==0)
  Response.Write("用户名或密码错误");
 else
  Response.Write("登录成功!");
}


10、获取错误信息并到指定页面
//In global.asax
protected void Application_Error(Object sender,EventArgs e)
{
 if(Server.GetLastError() is HttpUnhandledException)
 Server.Transfer("MyErrorPage.aspx");
}

11、清空Cookie
Cookie.Expires=[DateTime];//昨天的日期
Response.Cookies["UserName"].Expires=0;

12、回车转换成Tab
//客户端脚本
<script language="javascript" for="document" event="onkeydown">
 if(event.keyCode==13 && event.srcElement.type!='button' ** event.srcElement.type!='submit' && event.srcElement.type!='reset' &&

event.srcElement.type!='' && event.srcElement.type!='textarea');
 event.keyCode=9;
</script>

//服务器C#
//当在有keydown事件的控件上敲回车时,变为Tab
public void Tab(System.Web.UI.WebControls.WebControl webcontrol)
{
 webcontrol.Attributes.Add('onkeydown','if(event.keyCode=13) event.keyCode=9');
}


13、对话框
private static string ScriptBegin="<script language=\"javascript\">";
private static string scriptEnd="</script>";

public static void ConfirmMessageBox(string PageTarget,string Content)
{
 string ConfirmContent="var retValue=window.confirm('"+Content+"');"+"if(retValue){window.location='"+PageTarget+"';}";
 ConfirmContent=scriptBeing+ConfirmContent+ScriptEnd;
 Page ParameterPage=(Page)System.Web.HttpContext.Current.Handler;
 ParameterPage.RegisterStartupScript("confirm",ConfirmContent);
}

15、获得焦点
//str_Ctl_Name,获取焦点控件的ID 如txt_Name
//page Page类
public void GetFocus(string str_Crl_Name,Page page)
{
 page.RegisterStartupScript("","<script>document.forms(0)."+str_Ctl_Name+".focus();document.forms(0)."+str_Ctl_Name+".select

();</script>");
}

16、子窗体返回主窗体

public void redirect(string url,Page page)
{
 if(Session["ifDefault"]!=(object)"Default")
 {
  page.RegisterStartupScript("","<script>window.top.document.location.href='"+url+"';</script>");
 }
}


17、判断是否为数字
public bool IsNumberic(string oText)
{
 try
 {
  int var1=Convert.ToInt32(oText);
  return true;
 }
 catch
 {
  return false;
 }
}

获取字符串实际长度(包括中文字符)
public int stringLength(string oString)
{
 byte[] strArray=System.Text.Encoding.Default.GetBytes(oString);
 int res=strArray.Length;
 return res;
}

18、Server对象
1、Server.Transfer:转到另一个页面,但没有向浏览器发送任何信息,当用户刷新时,将刷新的是重定向之前的那一页。
2、Server.Execute:执行另一页面的请求,执行之后返回原来的页面。

19、下载文件的方法
Response.AppendHender("content-disposition","attachment;filename="+Request.Params("link").ToString());
Response.ContentType=Request.Params("contenttype").ToString();
Response.WriteFile(strLink);
Response.End();

可从数据中读出文件名称,直接指定到服务器的路径下即可,所以要求上传文件时需要指定文件在服务器上保存的径。
对于此方法,需要重定向到一个页面,此页面负责处理文件的写入。参数contenttype可以选择写或不写,在明确的情况下,最好写入。
但appendheader必须写明,最后调用WriteFile将文件输出,用到的路径是相对路径。

20、验证控件,
验证空值,验证网址,验证邮编,显示错误信息。

21、重新注册IIS
aspnet_regiis.exe -i


 

原文地址:https://www.cnblogs.com/iceberg2008/p/1448144.html