ASP.NET 學習手記

黑蘋果驅動之家發表於2006-02-14

Asp.net


1.ASP.net中如何在二個頁面傳遞資料

 

一、提交資料
(1) 用伺服器端控制元件後,再利用Server.Execute("send4.aspx"); 或者Server.Transfer("receive1.aspx"); 提交。前者仍然保持原有的web控制元件,後者不儲存。
(2) 寫在URL引數裡Response.Redirect("receive3.aspx?name=" + this.TextBox1.Text);
(3) 通過HTML控制元件,加入帶有action的form。

二、接收資料
(1) 按類接收資料
  if(Context.Handler is MyWebExample.send4)
  {
    send4 send = (send4)Context.Handler;
    Response.Write("Name:"+((TextBox)send.FindControl("TextBox1")).Text+"<p>");
  }
(2) 從URL中接收

  if(!IsPostBack)
  {
    Request.QueryString["text1"]

  }
(3) 從Form中接收Request.Form["text1"]
(4) 作為引數籠統接收Request.Params["text1"]

 

<返回>

 


2.如何新增使用者自定義標籤、自定義控制元件、定製控制元件

 

 <1>定製標籤較容易,把HTML程式碼儲存到一個檔案。然後用二句話在需要的地方引用:

    <%@ Register TagPrefix="mycontrol" TagName="myc" Src="myUserControl.ascx"%>
    <mycontrol:myc runat="server" id="Myc1"></mycontrol:myc>

 <2>自定義控制元件

    和定製標籤類似,只是可以自己新增屬性。

   

 

<返回>

 

 

3.新增客戶端驗證指令碼
 

(1)新增JavaScript
   <script language="javascript">
   function ClientCheck(source,arguments)
   {
      if(arguments.Value<1 || arguments.Value>100 )
      {
         arguments.IsValid=false;
         return false;
      }
      else
      {
         arguments.IsValid=true;
         return true;
      }
   }
   </script>

(2)新增CustomValidator控制元件,並且把ClientValidateFunction設為該函式

(3)設定ControlToValidate

 

<返回>

 

 

4.如何使得DataGrid有分頁輸出資料功能

(1).對DataGrid按右鍵,在彈出選單的“屬性生成器”中可以設定分頁。
(2).接著對控制元件新增PageIndexChanged事件。並且輸入以下程式碼
   private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
   {
      DataGrid1.EditItemIndex = -1;
      DataGrid1.CurrentPageIndex = e.NewPageIndex;
      DataGrid1.DataBind();
   }
 

<返回>
 

5.如何寫廣告控制元件的XML


<?xml version="1.0" encoding="utf-8" ?>
<Advertisements>
<Ad>
   <ImageUrl></ImageUrl>
   <NavigateUrl>http://www.neusoft.com</NavigateUrl>
   <AlternateText>歡迎</AlternateText>
   <Keyword>Keyword</Keyword>
   <Impressions>50</Impressions>
</Ad>
</Advertisements>

 

<返回>


 

6.如何利用Session和Application

 

使用Session和Application不要初始化,和普通的asp一樣

   if(Application["userCount"]==null)
      Application["userCount"]=0;
   else
      Application["userCount"]=Convert.ToInt32(Application["userCount"])+1;

session用法和Application一樣。

 

<返回>

 


7.如何利用Cookie

 

   if(Request.Cookies["cookie"]==null)
   {
      HttpCookie cookie = new HttpCookie("cookie","1");
      Response.Cookies.Add(cookie);

      this.Label3.Text="Cookies is 1";
   }
   else
   {
      HttpCookie cook = Request.Cookies["cookie"];

      Response.Cookies["cookie"].Value=(Int32.Parse(cook.Value)+1).ToString();

      this.Label3.Text=string.Format("Cookies is {0}",cook.Value);
   }

 

<返回>

8.利用ASP.net上傳檔案

  1.從HTML控制元件欄中拖入一個檔案瀏覽控制元件
  2.設定該控制元件在伺服器端執行
  3.給它的上傳新增程式碼
   string fileName=this.File1.PostedFile.FileName;
   string UploadFileName=Request.MapPath(Request.ApplicationPath+"//"+ System.IO.Path.GetFileName(fileName));
   this.File1.PostedFile.SaveAs(UploadFileName);
 

<返回>

9.在Asp.net中自定義異常頁面

  按異常處理優先順序排序
  (0)在Global.asax的Application_Error新增程式碼
    protected void Application_Error(Object sender, EventArgs e)
    {
        Context.ClearError();
        Response.Write("Error");
        Response.Redirect("errorpage.htm");
    }

  (1)後臺程式碼中的WebForm1_Error
     aspx頁面的屬性中UI.Page的Error事件中新增異常處理程式碼
     private void WebForm1_Error(object sender, System.EventArgs e)
     {
        Exception ex=Server.GetLastError();
        Session["error"]=ex.Message;
        Server.ClearError();
        Response.Redirect("error.aspx");
     }
  (2)在html程式碼中加入ErrorPage
     ErrorPage="http://www.21cn.com"
  (3)在Web.config中新增異常處理的頁面
    <customErrors mode="On" defaultRedirect="error.aspx">
    <error statusCode="401" redirect="error.aspx"/>
    <error statusCode="404" redirect="http://www.sina.com.cn"/>
    </customErrors>
  (4)在IIS中設定異常處理頁

<返回>

10.Asp.net的安全認證及Web.config的配置

 (1)在Web.config的配置   
   在<system.web>中修改選項
     驗證模式設為Form,並且驗證頁為
      <authentication mode="Forms">
        <forms loginUrl="Login.aspx" />
      </authentication>
     不允許匿名使用者
      <authorization>
        <deny users="?" />
      </authorization>

   在</system.web>後加入不要驗證就能使用資料庫的頁面,用於在該頁訪問資料庫,察看是否存在該使用者。
     <location path="Reg.aspx">
       <system.web>
         <authorization>
           <allow users="*"/>
         </authorization>
       </system.web>
     </location>

  (2)在程式碼中按普通方式,例如要求對方輸入資訊查詢資料庫或者XML進行驗證,驗證通過後,執行這句就表示驗證通過同時跳會開始進入的頁面
      System.Web.Security.FormsAuthentication.RedirectFromLoginPage(userName,true);
      登出用 System.Web.Security.FormsAuthentication.SignOut();  
      如果不想跳回原處,可以先授權再redirect到其他頁面  System.Web.Security.FormsAuthentication.SetAuthCookie();

<返回>

11.Asp網頁的EnableViewState屬性對網頁效能的影響

    ViewState主要是在提交以後回顯用的,它只有在頁面中的資料是提交到本頁時才有用,在這個時候,比如Textbox,你用EnableViewState="false",後臺同樣可以得到資料,但由於你提交到本頁,所以提交以後此Textbox中為空;而如果用EnableViewState="true",則提交以後返回時頁面中Textbox中為你提交以前的資料。
    另外,除了頁面Page中的EnableViewState,每個可以提交的控制元件,Textbox、Dropdownlist都有EnableViewState屬性。實際上,回發的資料並不依賴於ViewState。回發的控制元件都實現了IPostBackDataHandler介面,該介面的LoadPostData方法中,會對返回的值和ViewState中的值進行判斷,如果改變了的話,呼叫RaisePostDataChangedEvent方法觸發相應的事件(對於TextBox來說就是TextChanged事件)。
    如果你把EnableViewState="False",LoadPostData方法中返回的值始終會和文字框的預設值比較大小,也就是說,如果你在頁面TextBox中改變值以後,每次你點按鈕提交視窗都會觸發TextBox的TextChanged事件LoadPostData中如果返回的值和ViewState中的值不同的話,將把TextBox的值設定成返回的值這就是你看到的結果 。
    在很多情況下,把EnableViewState設為false,可以提高應用程式的效能。特別在等待後臺把資料填充到DataGrid的情況下。如果這個時候設為true,那麼cpu的時間都浪費 在序列化資料到 ViewState 中。
     每個控制元件(在標記上):sp:datagrid EnableViewState="false" ?/>
     每個頁面(在指令中): <%@ Page EnableViewState="False" ?%>
     每個應用程式(在 web.config 中): <Pages EnableViewState="false" ?/>
    更多請檢視微軟中國


<返回>
 

12.Web列印文件

<!--語言無關 儲存成 .HTML-->
<html>
<head>
<meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">
<title>網路列印模板頁</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<!--media=print 這個屬性可以在列印時有效-->
<style media=print>
.Noprint{display:none;}
.PageNext{page-break-after: always;}
</style>

<style>
.tdp
{
border-bottom: 1 solid #000000;
border-left: 1 solid #000000;
border-right: 0 solid #ffffff;
border-top: 0 solid #ffffff;
}
.tabp
{
border-color: #000000 #000000 #000000 #000000;
border-style: solid;
border-top-width: 2px;
border-right-width: 2px;
border-bottom-width: 1px;
border-left-width: 1px;
}
.NOPRINT {
font-family: "宋體";
font-size: 9pt;
}
</style>

</head>

<body >
<center class="Noprint" >
<p>
<OBJECT id=WebBrowser classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 width=0>
</OBJECT>
<input type=button value=列印 onclick=document.all.WebBrowser.ExecWB(6,1)>
<input type=button value=直接列印 onclick=document.all.WebBrowser.ExecWB(6,6)>
<input type=button value=頁面設定 onclick=document.all.WebBrowser.ExecWB(8,1)>
</p>
<p> <input type=button value=列印預覽 onclick=document.all.WebBrowser.ExecWB(7,1)>
<br/>
</p>
<hr align="center" width="90%" size="1" noshade>
</center>

<table width="90%" border="0" align="center" cellpadding="2" cellspacing="0" class="tabp">
<tr>
<td colspan="3" class="tdp">第1頁</td>
</tr>
<tr>
<td width="29%" class="tdp"> </td>
<td width="28%" class="tdp"> </td>
<td width="43%" class="tdp"> </td>
</tr>
<tr>
<td colspan="3" class="tdp"> </td>
</tr>
<tr>
<td colspan="3" class="tdp"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="50%" class="tdp"><p>這樣的報表</p>
<p>對一般的要求就夠了。</p></td>
<td> </td>
</tr>
</table></td>
</tr>
</table>
<hr align="center" width="90%" size="1" noshade class="NOPRINT" >
<!--分頁-->
<div class="PageNext"></div>
<table width="90%" border="0" align="center" cellpadding="2" cellspacing="0" class="tabp">
<tr>
<td class="tdp">第2頁</td>
</tr>
<tr>
<td class="tdp">看到分頁了吧</td>
</tr>
<tr>
<td class="tdp"> </td>
</tr>
<tr>
<td class="tdp"> </td>
</tr>
<tr>
<td class="tdp"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="50%" class="tdp"><p>這樣的報表</p>
<p>對一般的要求就夠了。</p></td>
<td> </td>
</tr>
</table></td>
</tr>
</table>
</body>
</html>


在基於框架的網頁列印時,用如下函式可以列印某個框架內的網頁
<input type=button onclick="printweb(this)">
<script>
function printweb()
{
this.focus();
window.print();
}
</script>
 

<返回>


13.將Web表格輸出為word或者Excel格式的檔案儲存在客戶端

   Response.Clear();
   Response.Buffer= true;
   if (Session["Language"]!=null && Session["Language"].ToString()!="EN")
   {
      Response.Charset="GB2312";
   }
   Response.AppendHeader("Content-Disposition","attachment;filename=FileName.xls");
   if (Session["Language"]!=null && Session["Language"].ToString()!="EN")
   {
      Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
   }//設定輸出流為簡體中文
   Response.ContentType = "application/ms-excel";//設定輸出檔案型別為excel檔案。
   //application/ms-word || application/ms-txt || application/ms-html || 或其他瀏覽器可直接支援文件

   this.EnableViewState = false;
   System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN",true);
   System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);
   System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
   DataGrid1.RenderControl(oHtmlTextWriter); //DataGrid1為DataGrid控制元件,也可以是動態生成的HtmlTable  <---唯一需要修改的地方
   Response.Write(oStringWriter.ToString());
   Response.End();
 

<返回>

相關文章