zoukankan      html  css  js  c++  java
  • 第五十七讲 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


     

  • 相关阅读:
    Flutter form 的表单 input
    FloatingActionButton 实现类似 闲鱼 App 底部导航凸起按钮
    Flutter 中的常见的按钮组件 以及自 定义按钮组件
    Drawer 侧边栏、以及侧边栏内 容布局
    AppBar 自定义顶部导航按钮 图标、颜色 以及 TabBar 定义顶部 Tab 切换 通过TabController 定义TabBar
    清空路由 路由替换 返回到根路由
    应对ubuntu linux图形界面卡住的方法
    [转] 一块赚零花钱
    [转]在树莓派上搭建LAMP服务
    ssh保持连接
  • 原文地址:https://www.cnblogs.com/iceberg2008/p/1448144.html
Copyright © 2011-2022 走看看