• 第五十七讲 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


     

  • 相关阅读:
    win7为IIS7添加程序映射
    【整理】在一亿个数中寻找出现频率最多的4个 <转>
    优化SQL Server数据库的几个大招<转>
    最长单调子序列(DP)
    详细解说 STL 排序
    获取word中的原始大小图片
    MD5 算法实现(c++)
    udp 通信中的端口问题
    Yacc 与 Lex 快速入门
    HDOJ (HDU) 1561 The more, The Better (树形DP)
  • 原文地址:https://www.cnblogs.com/iceberg2008/p/1448144.html
Copyright © 2020-2023  润新知