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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM