ASP.NET学习总结

第一章:
    1.代码后置(CodeBehind)好处:代码和页面内容分离,使代码更清晰

    2.控件的可拖移:选中控件-->菜单-->布局-->位置-->绝对定位

    3.打开"服务器资源管理器":视图-->服务资源管理器  (可以连接数据库)

    4.有分页功能的数据展示控件:GridView、DetailView
       作添加功能时,如果直接连数据库,拉入DetailView 要更改属性DefaultMode为Insert

    5.放在App_Code中的文件是全局文件

    6.控件的AutoPostBack属性在使用DropDownList控件如果需要数据随下拉框的值更改时改变时,需要将此属性设置成true


第二章:
    1.数据传递
        (1): get获取:Request.QueryString["paraName"]
    
        (2): post获取:Request.Form["paraName"]    
    1: 在一般情况下本页面post到本页面[回传] 
                    判断是首次加载还是回传-----IsPostBack    if(!IsPostBack)...页面第一次加载时,执行if里面的代码
    2: 跨页跳转
        2.1: Button -- PostBackUrl[Click事件不会执行] 跨服务器,相似于Click事件中Response.Redirect(url)         
        2.2: Server.Excute      不转移控制权, 本页面显示 Url重定向(不跳转到别的页面)
        2.3: Server.Transfer   转移了控制权, 本页面不显示(Server.Transfer)
        备注: .NET已经对get,post进行了封装

    2.状态保持
        (1): Session:
    Session["UserData"]          -->  Session["UserData_SessionID"]
    Clear()                          -->  清空Session,不改变SessionID
    Abandon()                     -->  清空Session,改变SessionID,结束当前会话,所有信息消失

        (2): Application
    定义在全局应用程序类[Global.asax]中的Application_Start

        (3): Cookie:只能保存文本,可以序列化成xml保存    
    Response.Cookies[Cookie名称].Value=变量值;        在客户端写入Cookie
    string 变量名=Request.Cookies[Cookie 名称].Value;    读取客户端Cookie

    HttpCookie hcCookie=new HttpCookie(Cookie名称,值);       //新添加一个Cookie
    hcCookie.Expires=DateTime.Now.AddYears(1); //新建Cookie 在本机上的保存时间为1年
    Response.Cookie.Add(hcCookie);

        (4): ViewState
    页面级别的状态保存--object
    序列化---远程传输
                缺点:性能低,不安全,一般不用

        (5): 用隐藏控件
    HiddenField---string
        (6): 数据库
        (7): 文件
        (8): 缓存

    3.Server
        A: MapPath -- 得到的是物理路径
    应用: 保存文件时一定需要一个完整的物理路径
    例如: 网站根目录:  D://MySchool
              代码: Server.MapPath("~/upFile/ziliao.txt")       返回路径:D://MySchool/upFile/ziliao.txt

    4.页面执行顺序
       (1):Page_Load
       (2):验证事件
       (3):服务器控件事件 如Button_ click
       (4):Render html生成事件
            //在所有事件执行完毕后再执行该事件
            protected override void OnPreRender(EventArgs e)
            {}
       
    5.获得客户IP地址:Request.UserHostAddress;
       获取当前浏览器版本信息:Request.ServerVariables["HTP_USER_AGENT"]
       获取当前客户浏览器使用语言:Request.ServerVariables["HTTP_ACCEPT_LANGUAGE"]

    6.页面之间的数据传递:
        protected void Page_Load(object sender, EventArgs e)
        {
    if(Page.PreviousPage != null)//当判断时,又会跳转的源页面,执行源页面的代码
        if(PreviousPage.IsCrossPagePostBack)
            this.lblShowURL.Text="您的查询条件为:"+((TextBox)this.PreviousPage.FindControl("txtKeyWord").Text;
       }//一般不用这种方法,而用
       if(Request.Form["txtKeyWord"] != null)
    this.lblShowURL.Text="您的查询条件为:"+Request.Form["txtKeyWord"];


第三章:
    1.服务器控件 AutoPostBack 自动回发
        如果一个对象有 runat="server" 则其是服务器控件
        服务器控件必须放在服务器form中,一个页面只能有这一个表单

    2.在后置代码中隐藏HTML服务器控件:this.divHead.Style.Add("display","one");

    3.让按钮不作验证:设置按钮的CausesValidation为false

    4.ValidationGroup 可使不同的控件在不同的组中,各自不受其它控件事件的影响

    5.动态改变母版页
       前提条件:所有ContentPlaceHolderID一致
       this.MasterPageFile="~/母版.master";

    6.隐藏母版页中ID=loginOrRegister的控件
        this.Master.FindControl("loginOrRegister").Visible = false;

       内容页给母版页的文本框赋值:
        if(this.Master != null)
    TextBox txt=this.Master.FindControl("TextBox1") as TextBox;
       if(txt != null)
    txt.Text=this.TextBox1.Text;

    7.ServerCtrl.ClientID
       document.getElementById("<%=this.TextBox1.ClientID%>").Value;//给子页面名称为TextBox1的文本框赋值

   
第四章:
    1: 三层,工厂模式[反射]
       抽象工厂
       反射[spring]: 工厂,策略,provider
       抽象工厂和反射细节区别
       A: DALFactory
       B: 配置文件
          appSettings-->name=dalType
          value=RoleRightSys.SqlServerDAL
      (1):value必须是程序集名称[不包括扩展名]
      (2):程序集项目中的程序集名称和默认命名空间要相等
      (3):将生成的程序集反射成对象
        public static T CreateOjectDal<T>(string className)
        {
                 string path = DBType;
                 className = path + "." + className;                
                 return (T)Assembly.Load(path).CreateInstance(className); //找程序集-->实例化类--> 转为父类
        }
        例如:DBType=RoleRightSys.SqlServerDAL
                 className=RoleInfoDal
                 T=IRoleInfo
        最终:className=RoleRightSys.SqlServerDAL.RoleInfoDal
    1):Assembly.Load(path) 加载path指定的程序集
        错误: 程序集找不到     ----->工厂项目和path指定的项目不再同一目录
                              程序集名称错误       ----->查看项目的属性-->程序集名称
            2):CreateInstance(className)---实例化对象
                      错误: 命名空间或类名不匹配, 区分大小写
           3):确保实例化对象继承了T所指定的接口

      程序集:.exe[控制台应用程序,window应用程序]或.dll[类库]      
      用反射实现的优点:
    A: 代码简捷  一个类 一个方法
    B: 扩展性更好[功能扩展:多一个接口, 支持扩展:多一个数据库]

    2: xml操作[基础]
       A: xml的序列化
    1):更加简单地替换IO操作
    2):结合WebService工作
    3):配合Ajax工作
       要求
    1):被序列化的类必须用public修饰
    2):被序列化的类必须有默认的构造函数
    3):被序列化的相关类也必须满足1),2)条件
       使用场合
    1):单纯为了数据持久化
    2):为了实现依赖缓存
       缺点:不能按需求完成层次结构

    3.页面中输出客户端脚本(JavaScript)
        this.Page.ClientScript.RegisterStartupScript(this.GetType(),"","<script>alert('请填写用户名!')</script>");


第五章:
    1.调用脚本:
        this.ltMain.Text="<script>alert('注册成功!');window.location='default.aspx'</script>";
      
    2: 光棒效果: 订阅RowDataBound事件,行数据绑定后触发
       protected void gvBooks_RowDataBound(object sender, GridViewRowEventArgs e)
       {
                 if (e.Row.RowType == DataControlRowType.DataRow)
                {
                     e.Row.Attributes.Add("onmouseover", "currentcolor=this.style.backgroundColor;this.style.backgroundColor='#6699ff'");
                     e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=currentcolor");          
                }
        }

    3: 全选
        3.1: 添加自定列 TemplateField
        3.2: 编辑自定义列
    3.2.1: HeaderTemplate html-->checkbox
                3.2.2: ItemTemplate 服务器checkbox
        3.3  html-->checkbox 的 onclick 事件

    4: 类型修改
        protected void btnModify_Click(object sender, EventArgs e)
        {
            StringBuilder ids = new StringBuilder();
            foreach (GridViewRow row in this.gvBooks.Rows)//遍历整个GridView行
            {
                CheckBox ck = row.FindControl("ckItem") as CheckBox;
                if (ck != null && ck.Checked)
                {
                    ids.Append(gvBooks.DataKeys[row.RowIndex].Value.ToString() + ",");//必须设置 GridView的属性 --> DataKeyNames为Id (bookid)
                }
            }
            if (ids.Length != 0)
            {
                string strIds = ids.ToString();
                strIds = strIds.Substring(0, strIds.Length - 1);
                BookManager.ModifyCatagory(strIds, ddlTypeName.SelectedValue.ToString());
                this.gvBooks.DataBind();
            }
        }
        更新sql为update book set CategoryID=1 where bookid in (1,2,3,4,5)
   
    5: 如果要Html标签正确显示效果:设置: 数据项的 HtmlEncode =false

    6.Eval 和Bind方法的区别:
       Eval 为只读的方法,而Bind方法会将值回传到服务器
           Eval重载方法:<%# Eval("PublishDate","{0:dd/MM/yyyy}")%>      //0代表对应的PublishDate字段,dd/MM/yyyy为文本的显示格式
       Bind既能从服务器获取值又能回传值到服务器


第六章:
    1.数据验证控件:
       (1).RequiredFieldValidator:非空验证     display属性设置为Dynamic可动态该变(如果一个文本框有两个验证,如果一个验证没有显示,则会隐藏,不会                 占用存在的空间)
       (2)CompareValidator:是否符合要求(比较值)    (如果用户输入为空,则不进行验证)
             ControlToValidate            要验证的控件
             ControlToCompare        要来与要验证控件进行比较的控件的ID
             Operator            设置要比较的运算符

             例:要比较输入是否为日期类型,需移除ValueToCompare和ControlToCompare的值,设置Type类型为Date,设置Operator值为DataTypeCheck
       (3)RangeValidator:范围检查
            ControlToValidate        要验证的控件
            MaximumValue        最大值(包括最大值)
            MinimumValue        最小值(包括最小值)
            Type            验证类型
       (4)RegularExpressionValidator:正则表达式验证
            中文字符的正则表达式:[\u4e00-\u9fa5]
            货币(正数或负数):(-)?\d+(\.\d\d)?
       (5)CustomValidator:自定义验证控件
            ControlTovalidate        要验证的控件的ID
            ClientValidationFunction    用于设置客户端验证的脚本函数
       (6)ValidationSummary:汇总所有的错误报告
            ShowMessageBox        是否显示弹出的提示消息
            ShowSummary        是否显示该报告内容(一般为false)

    2.Page.IsValid:所有验证是否都通过

    3.<asp:Literal id="ltMain" runat ="server"></asp:Literal>:简化Label控件,用它生成的HTML代码不包含任何自动生成的HTML元素
        一般在弹出脚本信息的时候用到
      如:this.ltMain.Text="<script>alert('注册成功!')</script>";

    4.图片上传:
       protected void dvBookList_ItemUpdated(object sender,DetailsViewupdatedArgs e)
      {
    FileUpLoad fulBook=this.dbBookList.FindControl("fulBook") as FileUpload;
       Image imgBook=this.dvBookLIst.FindControl("imgBook") as Image;
      string fileName=fulBook.FileName;
    if(fileName.Trim().Length !=0)
    {
        string strPath=Server.MapPath(imgBook.ImageUrl);
        fulBook.PostedFile.SaveAs(strPath);//覆盖原来路径中图片
    }
       }
       
    5 .MultiView:可以作下一步的功能
    例:mvOne.ActiveViewIndex=0;mvOne.ActiveViewIndex++;mvOne.ActiveViewIndex - -;

    6.ImageMap:可在一张图片上制造多个连接
    例:
         <div>
                <asp:ImageMap ID="imgmap" runat="server" HotSpotMode="Navigate" ImageUrl="~/Images/模型.JPG" OnClick="imgmap_Click">
                <asp:RectangleHotSpot Bottom=267 Right=150 AlternateText="User" NavigateUrl="~/FileUpload.aspx" Target="_blank" HotSpotMode="PostBack"                     PostBackValue="User" />
                <asp:RectangleHotSpot Bottom=267 Left=151 Right=318 AlternateText="UserState" NavigateUrl="~/Calendar.aspx" HotSpotMode="PostBack"                     Target="_blank" PostBackValue="UserState" />
              </asp:ImageMap>
              <asp:Label ID="lblShow" runat="server" Width="312px"></asp:Label>
        </div>

    7.HyperLink :相当于HTML中的<a href=""></a>标签

     8.删除
          (1): GridView 尽量不要用GridView自带的删除按钮,因为不会提示
               自带删除
       1: 设置数据源的Delete方法
       2: 设置GridView的DataKeyNames--Id
       3: 不会提示用户删除
           (2): 添加子定义模板,用来删除 添加一个LinkButton
           (3): 获取删除项ID LinkButton --> CommandArgument
           (4): 设置OnClientClick属性
           4.1 直接设置
                 4.2 RowDataBound 中写代码
           (5): 设置CommandName-->MyDel[千万别省事,写成Del]
           (6): 订阅GridView的RowCommand,也可以订阅LinkButton的Click事件
       修改
           (1): 编写修改的BLL层方法,参数一般不能是实体类,而是参数列表
                 参数的名字应该和实体类的属性对应,但不区分大小写,可以自由排列
           (2): 如果遇到html格式的内容,应设置Page的ValidateRequest="false"    (页面最上面写)
           (3): 如果不使用自定义模板,那么将不更新字段的ReadOnly设置为true
           (4): 如果更新的方法参数没有对应的更新项,那么应在ItemUpdating赋值
           (5): 如果使用自定义模板列,注意Bind和Eval区别
           (6): 如果要添加验证,必须变成模板列


第七章:
    1.GridView展示:多行多列数据
       DataList 展示:多行单列数据
       Repeater展示:单行多列数据

    2.PagedDateSource类的分页
       CurrentPageIndex     当前页
       PageCount                总页数
       Count         总记录数
       PageSize         每页记录数
       DataSource          数据源
       AllowPaging          控件是否自动分页
       IsFirstPage          控件是第一页
       IsLastPage          页面是最后一页
    缺点:不能超过一万行的数据,占用资源

    例:
        PagedDataSource savePage = new PagedDataSource();
        savePage.DataSource = BookManager.GetOrderedSmallBooksByCategoryId(0, ViewState["Order"].ToString());
        savePage.AllowPaging = true;//不写不会分页
        savePage.PageSize = 12;
        savePage.CurrentPageIndex = Pager;
        this.Repeater.DataSource = savePage;
        this.Repeater.DataBind();//不写不会显示

    3.ViewState["名称"]=值;页面级别的信息保持,不影响其它页面的分页
    
  
第八章
    1. 使用FreeTextBox控件:将FreeTextBox.dll拖入工具箱中,就可以使用
         注意:使用该控件,需要在Page指令上添加ValidateRequest="false"

    2.CodeSmith工具:编写代码是在CodeSmith Studio中,运行在CodeSmith Explorer中
       使用条件:表要有主键,但不能有组合键      
       模板声明:<% CodeTemplate Language="C#" TargetLanguage="C#" Description=""%>
                       TargetLanguage:生成文件类型,如果要生成.sql文件,则标记为“T-SQL”            
       定义参数:<% Property Name="Number" Type="Int32" Category="Context" Description=""%>
                     Name:参数名
                 Type  :参数类型 
                 Category:生成的模板显示的是输入框还是下拉框等。

       如果涉及到数据库访问,需要引入相关的组件并声明命名空间,代码如下:
       <%@ Assembly Name="SchemaExplorer" %>
       <%@ Import Namespace="SchemaExplorer" %>

       CodeSmith编码例子:(创建一个更新的存储过程)
       <%@ CodeTemplate Language="C#" TargetLanguage="Text" Src="" Inherits="" Debug="False" Description="Template description here." %>
       <%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="????" %>
       <%@ Property Name="ModelsNamespace" Default="Models" Type="System.String" Category="Context" Description="????" %>
       <%@ Assembly Name="SchemaExplorer" %>
       <%@ Import Namespace="SchemaExplorer" %>

       Create PROCEDURE [Pro_Update<%=SourceTable.Name%>]
        <%for(int i=0;i<SourceTable.Columns.Count;i++)%>
        <%{%>
           <%=GetType(SourceTable.Columns[i])%><% if(i<SourceTable.Columns.Count-1)%><%{%>,<%}%>
        <%}%>
       as        
          Update Books set <% for(int i=0;i<SourceTable.Columns.Count;i++) %><%{%><%=GetColumn(SourceTable.Columns[i])%><% if(GetColumn                     (SourceTable.Columns[i]) !="" && i<SourceTable.Columns.Count-1)%><%{%>,<%}%><%}%>
         where Id=@<%=SourceTable.PrimaryKey.MemberColumns[0].ToString().Substring(SourceTable.PrimaryKey.MemberColumns[0].ToString                             ().LastIndexOf(".")+1)%>

       <script runat="template">
    public string GetType(ColumnSchema column)
    {        
        string para="@"+column.Name+" "+column.NativeType;
        switch(column.DataType)
        {
            case DbType.String:
            case DbType.AnsiString:
            case DbType.AnsiStringFixedLength:
            case DbType.StringFixedLength:
                para+="("+column.Size+")";
                break;
        }        
        return para;
    }
    public string GetColumn(ColumnSchema column)
    {
        string para;
        if(SourceTable.NonPrimaryKeyColumns.Contains(column))        
            para=column.Name+"=@"+column.Name;            
        else         
             para="";
        return para;
    }
       </script>


第九章
      1.ASP.NET在处理HTTP请求时的两个核心的机制是HttpModule和HttpHandler

      2.用户控件 后缀名:.ascx (Web 用户控件)
         注意: (1).用户控件可以包含其它用户控件
           (2).用户控件不可以单独访问
          (3).用户控件不可以自己访问自己
          (4).不能导入Style样式
          (5).内容页的Load事件比用户控件的Load事件先执行

      3.HttpHandler程序:后缀名:.ashx  (一般处理程序)
         注意:public void ProcessRequest(HttpContext context){} 是该程序运行的最终方法,程序运行从该方法开始
         该程序可直接访问,并且输出context.Response.Write("Hello World");括号中写的内容
         context.MapPath(context.Request.Params["ISBN"].ToString()+".jpg");可获取文件的物理路径
   
      4.在Web.config配置文件的<system.web></system.web>节点中写<add verb="*" path="Image/BookCovers/*.jpg" type="CoverHandler/">
         当应用程序访问Image/BookCovers/下面的图片格式为.jpg时,将自动访问ConverHandler类
         werb:代表(Get,Post,FTP等)列表,*为通配符,此处表示所有的请求

      5.HttpHandler程序默认不能访问session对象,必须实现System.Web.SessionState.IRequiresSessionState接口才行,否则报错
        示例:
    public class ValidHandler : IHttpHandler, System.Web.SessionState.IRequiresSessionState
    {
              public void ProcessRequest(HttpContext context)
              {
              }
       }


第十章
      1.如果网站有上传功能,要过滤掉文件名为*.aspx ,*.ashx, *.asp

      2.在Web.config中自定义节点必须现在<configSections>中声明,例如:
         <configSections>
     <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
        </configSections>

      3.加密一个特定网站的web.config文件
        在SDK 命令提示中aspnet_regiis -pef "connectionStrings" "E:\ASP\资料\用户控件和内容页的相互传值\Web" -prov                          "DataProtectionConfigurationProvider"
  
         解密:
         aspnet_regiis -pdf "connectionStrings" "E:\ASP\资料\用户控件和内容页的相互传值\Web" -prov   "DataProtectionConfigurationProvider"

      4.自定义错误:
          <customErrors defaultRedirect="~/ErrorPage.htm" mode="RemoteOnly">
    <error statusCode="404" redirect="FileNotFound.htm"/>
          </customErrors>

          defaultRedirect代表发生错误时,浏览器重定向到的URL
          mode指示启用(On).禁用(Off)自定义错误,还是只让其显示给远程计算机(RemoteOnly),一般用RemoteOnly
          error子标签用于定义一些特殊的错误,属性:
                  statusCode:HTTP错误的状态码,比如,403为禁止访问、404为文件未找到、500为内部服务器错误等
                  redirect:用于指定当该状态的错误发生时,重定向到的页面的URL

      5.调试:
         <!-- 
            设置 compilation debug="true" 将调试符号插入
            已编译的页面中。但由于这会影响性能,因此只在开发过程中将此值设置为 true。部署时将此值设置为false
        -->
       <!--
            通过 <authentication> 节可以配置 ASP.NET 使用的 
            安全身份验证模式,
            以标识传入的用户。 
        -->
       <compilation debug="true">
    <assemblies>
        <add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    </assemblies>
       </compilation>

      6.运行时配置:<httpRuntime enable="true" executionTimeout="15" maxRequestLength="4096"/>
         enable:设置为应用程序的状态,如果设置为false,则相当于关闭了该站点
         executionTimeOut:程序执行时间的上限,如果执行一个复杂的循环,如果时间超过了设定的时间,程序将自动结束掉
         maxRequestLength:设置最大上传内容大小,默认为4096KB(4MB)。

     7.在Visual Studio 2005 命令提示中输入aspnet_regsql 可以创建aspnetdb.mdb数据库
        注意:aspnetdb.mdb数据库可自行附加到数据库中

      8.部署
          部署前准备:
          (1).在web.config中关闭调试功能
 
                <compilation debug="false">
        <assemblies>
        <add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
        </assemblies>
                </compilation>

           (2).使用Release的方式编译应用程序

      9.发布站点方式:
         (1).XCopy方式 
               语法:xcopy 源目录  目标目录  /f /e /k /h
               示例:Xcopy D:\MyBookShop\Web D:\Web\Default.aspx

         (2).复制站点
               操作:在“解决方案管理器”的工具栏上有一个复制站点的选项
               缺点:网站可能被别人破解

          (3).发布预编译网站(常用方式)
                操作:右键单击“解决方案管理器”中的Web项目,“允许更新此预编译站点”勾上,其它两个复选框不勾,如果“使用此命名和单页程序                             集”勾上,则站点容易被破解

                             
       
       
            

补充:
     1.设置DIV的overflow:hidden 可使DIV过多的时候也不会被撑大,其它内容会自动隐藏
 
     2.使用WdatePicker.js 日期控件
        <asp:TextBox ID="TextBox10" runat="server" Text='<%# Bind("PublishDate") %>' CssClass="Wdate"  
    onFocus="new WdatePicker(this,'%Y-%M-%D',true,'default')"></asp:TextBox>

    3.代码生成sqlite数据库及表
       private static string datasouce = ConfigurationManager.AppSettings["ConnectionString"].ToString();
       if (!File.Exists("StoreImage.db3"))
       {
                SQLiteConnection.CreateFile("StoreImage.db3");
                string sql = "Create Table myPictures(imageID int,imageFile image)";//创建表myPictures
                SQLiteCommand cmd = new SQLiteCommand(sql, new SQLiteConnection(datasouce));
                cmd.Connection.Open();
                cmd.ExecuteNonQuery();
                cmd.Connection.Close();
       }
       App.config 文件代码
       <configuration>
      <appSettings>
            <add key="ConnectionString" value="Data Source=|DataDirectory|\StoreImage.db3"/>
      </appSettings>
       </configuration>

转载于:https://www.cnblogs.com/slyzly/articles/2603597.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值