1. 程式人生 > >asp net夜話之五 Page類和回撥技術

asp net夜話之五 Page類和回撥技術

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

《asp.net夜話》封面

asp.net夜話之五:Page類和回撥技術

在今天我主要要介紹的有如下知識點:
Page類介紹
Page的生命週期
IsPostBack屬性
ClientScriptManager類
回撥技術(CallBack)

 

Page類介紹


asp.net有時候也被成為WebForm,因為開發一個asp.net頁面就像開發一個WinFrom窗體一樣,我們同樣可以採用拖拽控制元件、雙擊產生相關處理程式碼的方法。在asp.net中,建立一個頁面可以採用兩種模型。


單頁模型
用Dreamweaver建立的asp.net頁面就是單頁模型,當然利用Visual Studio 2005也能建立單頁模型,不過在Visual Studio 2005中建立的頁面預設不是單頁模型,要想在Visual Studio 2005建立單頁模型的網頁如下:
 
注意確保“將程式碼放在單獨的檔案中”選項處於未選中狀態,預設情況下這個選項是處於選中狀態的。這樣就建立了單頁模型的網頁。
此時的頁面程式碼如下:


 

  1. <%@ Page Language="C#" %>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <script runat="server">
  4. </script>
  5. <html xmlns
    ="http://www.w3.org/1999/xhtml" >
  6. <head runat="server">
  7.     <title>無標題頁</title>
  8. </head>
  9. <body>
  10.     <form id="form1" runat="server">
  11.     <div>
  12.     
  13.     </div>
  14.     </form>
  15. </body>
  16. </html>

注意在頁面中有這樣一句程式碼:

  1. <script runat="server">
  2. </script>

這句程式碼與普通javascript語句塊不同的是有一個runat="server"屬性,表示這裡的程式碼是在伺服器上執行的C#程式碼。切換到設計檢視,然後雙擊頁面,然後這部分會變成如下的樣子:

  1. <script runat="server">
  2.     protected void Page_Load(object sender, EventArgs e)
  3.     {
  4.     }
  5. </script>

其中Page_Load就是頁面載入的時候在伺服器上執行的方法。
單頁模型的特點是HTML標記、控制元件程式碼及伺服器端執行的C#程式碼全部包含在一個aspx頁面中,Web伺服器第一次執行該頁面的時候會將這個頁面生成一個類檔案,對於上面的Index.aspx頁面,會生成ASP.Index_aspx的類,然後再將這個ASP.Index_aspx類編譯成IL程式碼,Web伺服器通過CLR(Common Language Runtime,通用語言執行環境)執行相應的IL程式碼。
單頁模型的缺點是頁面和程式碼混在一起,維護起來較為麻煩。

 

程式碼頁面分離模式
程式碼頁面模式就是將頁的標記(HTML程式碼)和伺服器端元素放在.aspx頁面中,而也程式碼在位於一個.aspx.cs中。採用預設方式建立的aspx網頁就是這種方式。
下面就是一個採用程式碼頁面分離模式建立的Home.aspx頁面的程式碼:


 

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Home.aspx.cs" Inherits="Home" %>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" >
  4. <head runat="server">
  5.     <title>無標題頁</title>
  6. </head>
  7. <body>
  8.     <form id="form1" runat="server">
  9.     <div>
  10.     
  11.     </div>
  12.     </form>
  13. </body>
  14. </html>

其對應的頁程式碼是:


 

  1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Collections;
  5. using System.Web;
  6. using System.Web.Security;
  7. using System.Web.UI;
  8. using System.Web.UI.WebControls;
  9. using System.Web.UI.WebControls.WebParts;
  10. using System.Web.UI.HtmlControls;
  11. public partial class Home : System.Web.UI.Page
  12. {
  13.     protected void Page_Load(object sender, EventArgs e)
  14.     {
  15.     }
  16. }

首先要關注的aspx的頭部分程式碼:

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Home.aspx.cs" Inherits="Home" %>

@Page是一個頁面指令,在這裡Language="C#"指明瞭當前頁面採用的後臺程式碼是C#語言,CodeFile="Home.aspx.cs"表示這個頁面對應的頁程式碼檔案是Home.aspx.cs這個檔案,Inherits="Home"表示當前aspx頁繼承自Home這個類。
現在再關注一下頁程式碼檔案宣告:

  1. public partial class Home : System.Web.UI.Page

從這部分程式碼可以看出Home類是繼承自System.Web.UI.Page類的。注意這裡還有一個C#2.0的關鍵字partial,這個關鍵字表示當前程式碼是一個區域性類,以表示這個類是構成整個Web頁面窗體的一部分。Web伺服器執行這個頁面的時候最終會將aspx頁面和對應的頁程式碼編譯成一個類檔案,然後生成IL程式碼。
程式碼頁面分離模式的好處是頁面展示部分和邏輯控制部分的程式碼分離開來,便於管理和維護,這也是微軟推薦的開發方式。

 

asp.net頁面的宣告週期
asp.net頁面執行的時候將經歷一個宣告週期,這個生命週期中會進行一系列的操作,呼叫一系列的方法。瞭解asp.net頁面的生命週期對於精確控制頁面的控制元件呈現方式和行為非常重要。
一般說來一個常規頁面要經歷如下幾個生命週期階段:

 

階段 說明
頁請求 頁請求發生在頁生命週期開始之前。使用者請求頁時,ASP.NET 將確定是否需要分析和編譯頁(從而開始頁的生命週期),或者是否可以在不執行頁的情況下發送頁的快取版本以進行響應。
開始 在開始階段,將設定頁屬性,如 Request 和 Response。在此階段,頁還將確定請求是回發請求還是新請求,並設定 IsPostBack 屬性。此外,在開始階段期間,還將設定頁的 UICulture 屬性。
頁初始化 頁初始化期間,可以使用頁中的控制元件,並將設定每個控制元件的 UniqueID 屬性。此外,任何主題都將應用於頁。如果當前請求是回發請求,則回發資料尚未載入,並且控制元件屬性值尚未還原為檢視狀態中的值。
載入 載入期間,如果當前請求是回發請求,則將使用從檢視狀態和控制元件狀態恢復的資訊載入控制元件屬性。
驗證 在驗證期間,將呼叫所有驗證程式控制元件的 Validate 方法,此方法將設定各個驗證程式控制元件和頁的 IsValid 屬性。
回發事件處理 如果請求是回發請求,則將呼叫所有事件處理程式。
呈現 在呈現期間,檢視狀態將被儲存到頁,然後頁將呼叫每個控制元件,以將其呈現的輸出提供給頁的 Response 屬性的 OutputStream。
解除安裝 完全呈現頁、將頁傳送至客戶端並準備丟棄時,將呼叫解除安裝。此時,將解除安裝頁屬性(如 Response 和 Request)並執行清理。

在頁的生命週期中,一般會有如下事件:


頁事件 典型使用
Page_PreInit 使用 IsPostBack 屬性確定是否是第一次處理該頁。
建立或重新建立動態控制元件。
動態設定主控頁。
動態設定 Theme 屬性。
讀取或設定配置檔案屬性值。
注意:如果請求是回發請求,則控制元件的值尚未從檢視狀態還原。如果在此階段設定控制元件屬性,則其值可能會在下一階段被改寫。
Page_Init 讀取或初始化控制元件屬性。
Page_Load 讀取和更新控制元件屬性。
Control events 執行特定於應用程式的處理:
如果頁包含驗證程式控制元件,請在執行任何處理之前檢查頁和各個驗證控制元件的 IsValid 屬性。
處理特定事件,如 Button 控制元件的 Click 事件。
Page_PreRender 對頁的內容進行最後更改。
Page_Unload 執行最後的清理工作,可能包括:
關閉開啟的檔案和資料庫連線。
完成日誌記錄或其他特定於請求的任務。
需要注意的是,每個asp.net控制元件也有與asp.net類似的生命週期,如果aspx頁面中包含有asp.net伺服器控制元件,那麼在呼叫頁面的方法時也會呼叫控制元件的相關方法。

另外,Web應用程式是無狀態的。每次請求一個新網頁或者重新整理頁面伺服器都會建立一個當前頁的新例項,這就意味著無法獲取頁面的以前的資訊,如果確實需要這麼做,需要採用額外的機制。
我們將剛才新建的Index.aspx頁面中新增程式碼,如下:

  1. <%@ Page Language="C#" %>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <script runat="server">
  4.     string date;
  5.     protected void Page_Load(object sender, EventArgs e)
  6.     {
  7.         if (date == null)//如果date為空則設定為當前時間的字串形式
  8.         {
  9.             date = DateTime.Now.ToString();
  10.         }
  11.         Response.Write("當前時間:"+date);
  12.     }
  13. </script>
  14. <html xmlns="http://www.w3.org/1999/xhtml" >
  15. <head runat="server">
  16.     <title>無標題頁</title>
  17. </head>
  18. <body>
  19.     <form id="form1" runat="server">
  20.     <div>
  21.     
  22.     </div>
  23.     </form>
  24. </body>
  25. </html>

按照正常理解,第一次執行的時候date字串為null,會被設定成系統當前的字串表示形式,並且輸出,再次重新整理的時候date字串不再為空,會依然輸出剛才的時間字串,但是結果卻不是這樣。第一次執行的結果:
 
重新整理頁面之後的結果:
 
這就證明了即使是重新整理當前頁也會重新生成一個當前頁面的例項,因為只有在生成頁面新例項的情況下date字串變數才為空,才會被重新設定值。

 

IsPostBack屬性
Page類有一個IsPostBack屬性,這個屬性用來指示當前頁面是第一次載入還是響應了頁面上某個控制元件的伺服器事件導致回發而載入。
這次我們繼續對Index.aspx頁面新增程式碼,在頁面中增加了一個Button控制元件,如下:

  1. <%@ Page Language="C#" %>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <script runat="server">
  4.     string date;
  5.     protected void Page_Load(object sender, EventArgs e)
  6.     {
  7.         if (date == null)//如果date為空則設定為當前時間的字串形式
  8.         {
  9.             date = DateTime.Now.ToString();
  10.         }
  11.         Response.Write("當前時間:"+date);
  12.         if (!Page.IsPostBack)
  13.         {
  14.             Response.Write("第一次載入。");
  15.         }
  16.         else
  17.         {
  18.             Response.Write("響應客戶端回發而載入。");
  19.         }
  20.     }
  21.     protected void btnOK_Click(object sender, EventArgs e)
  22.     {
  23.     }
  24. </script>
  25. <html xmlns="http://www.w3.org/1999/xhtml" >
  26. <head runat="server">
  27.     <title>無標題頁</title>
  28. </head>
  29. <body>
  30.     <form id="form1" runat="server">
  31.     <div>
  32.         <asp:Button ID="btnOK" runat="server" OnClick="btnOK_Click" Text="提交" /></div>
  33.     </form>
  34. </body>
  35. </html>

頁面第一次執行的結果:
 
按一下F5重新整理頁面的結果:
 
點選一下“提交”按鈕之後的結果:
 
由此可見每次開啟一個頁面和重新整理一個頁面效果都是一樣的,只有響應客戶端回發時IsPostBack屬性才是true。瞭解這個屬性和伺服器採用了一種機制來“記錄”伺服器控制元件的狀態這種做法(其實利用了ViewState和ControlState機制,這部分後續文章中會講到)對於將來資料繫結會有很大作用。

 

動態輸出javascript指令碼
對於Index.aspx頁面上面的執行情況,我們看到了滿意的結果。我們再來看一下這個頁面在客戶端生成的HTML程式碼,在瀏覽器視窗開啟的頁面點滑鼠右鍵,然後選擇“檢視原始檔”,HTML程式碼如下:

  1. 當前時間:2008-9-21 0:04:33響應客戶端回發而載入。
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" >
  4. <head><title>
  5.  無標題頁
  6. </title></head>
  7. <body>
  8.     <form name="form1" method="post" action="Index.aspx" id="form1">
  9. <div>
  10. <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTY3NzE5MjIyMGRkD2VvJFADDdEHh4W9UfAyzIvI3ss=" />
  11. </div>
  12.     <div>
  13.         <input type="submit" name="btnOK" value="提交" id="btnOK" /></div>
  14.     
  15. <div>
  16.  <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAgL8vZamCQLdkpmPAeM33vfm1ARVNKdKAoq5+eQdFI1J" />
  17. </div></form>
  18. </body>
  19. </html>

我們會看到“當前時間:2008-9-21 0:04:33響應客戶端回發而載入。”這句話位於<html></html>標記之外。在第一夜時候就提到過,asp.net頁面是滿足XML標準的HTML語言,但是通過在Page_Load事件中利用Response屬性會將文字輸出在<html></html>標記之外,不符合XHTML標準。這對於普通頁面來說也許並無大礙,但是如果在頻繁輸出javascript指令碼的網頁中,可能會對網頁的客戶端執行效果產生影響。因為javascript指令碼塊在客戶端呼叫方法之前還是客戶端呼叫方法之後效果可能會不一樣。
下面在Home窗體的Page_Load事件中新增程式碼,如下:


 

  1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Collections;
  5. using System.Web;
  6. using System.Web.Security;
  7. using System.Web.UI;
  8. using System.Web.UI.WebControls;
  9. using System.Web.UI.WebControls.WebParts;
  10. using System.Web.UI.HtmlControls;
  11. public partial class Home : System.Web.UI.Page
  12. {
  13.     protected void Page_Load(object sender, EventArgs e)
  14.     {
  15.         if (!Page.IsPostBack)
  16.         {
  17.             Response.Write("<script language='javascript'>alert('" + DateTime.Now.ToString() + "')</script>");
  18.         }
  19.     }
  20. }

這樣每次執行Home.aspx頁面的時候都會彈出一個對話方塊,如下圖:
 
這不是我們所關心的,我們關注的是生成的HTML程式碼,如下:

  1. <script language='javascript'>alert('2008-9-21 0:22:52')</script>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" >
  4. <head><title>
  5.  無標題頁
  6. </title></head>
  7. <body>
  8.     <form name="form1" method="post" action="Home.aspx" id="form1">
  9. <div>
  10. <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGTB6tgIyCoS2q3pZeKmhFwC24pQzw==" />
  11. </div>
  12.     <div>
  13.     
  14.     </div>
  15.     </form>
  16. </body>
  17. </html>

可以看見輸出的javascript程式碼在<html></html>標記之外。
在Page類中有一個ClientScript屬性,它是ClientScriptManager的例項,這個類是在asp.net2.0中新增的。ClientScriptManager有如下幾個常用方法:
RegisterClientScriptBlock方法:向 Page 物件註冊客戶端指令碼。
RegisterStartupScript方法:向 Page 物件註冊啟動指令碼。
ClientScriptManager類通過鍵string和Type來唯一標識指令碼。具有相同型別的鍵和Type的指令碼識為同一指令碼。
下面對Home窗體的Page_Load事件中輸入如下程式碼:


 

  1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Collections;
  5. using System.Web;
  6. using System.Web.Security;
  7. using System.Web.UI;
  8. using System.Web.UI.WebControls;
  9. using System.Web.UI.WebControls.WebParts;
  10. using System.Web.UI.HtmlControls;
  11. public partial class Home : System.Web.UI.Page
  12. {
  13.     protected void Page_Load(object sender, EventArgs e)
  14.     {
  15.         if (!ClientScript.IsClientScriptBlockRegistered(this.GetType(), "ClientScriptBlock"))
  16.         {
  17.             ClientScript.RegisterClientScriptBlock(this.GetType(), "ClientScriptBlock""<script language='javascript'>alert('ClientScriptBlock')</script>");
  18.         }
  19.         if (!ClientScript.IsStartupScriptRegistered(this.GetType(), "StartupScript"))
  20.         {
  21.             ClientScript.RegisterStartupScript(this.GetType(), "StartupScript""<script language='javascript'>alert('StartupScript')</script>");
  22.         }
  23.         //Response.Write("<script language='javascript'>alert('" + DateTime.Now.ToString() + "')</script>");
  24.     }
  25. }

執行該頁面時,會彈出兩個提示視窗,生成的HTML程式碼如下:

 

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" >
  3. <head><title>
  4.  無標題頁
  5. </title></head>
  6. <body>
  7.     <form name="form1" method="post" action="Home.aspx" id="form1">
  8. <div>
  9. <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGTB6tgIyCoS2q3pZeKmhFwC24pQzw==" />
  10. </div>
  11. <script language='javascript'>alert('ClientScriptBlock')</script>
  12.     <div>
  13.          </div>
  14.     
  15. <script language='javascript'>alert('StartupScript')</script></form>
  16. </body>
  17. </html>

可以看出上面的兩個方法輸出的javascript指令碼都在<form></form>標記之內,不會破環文章的結構,而且RegisterClientScriptBlock方法輸出的javascript指令碼程式碼塊靠近<form>標記的開始標記,而RegisterStartupScript方法輸出的javascript指令碼程式碼塊靠近<form>標記的結束標記,瞭解這一點對於控制動態新增的客戶端指令碼的時間是非常有利的。

 

回撥技術(CallBack)
在asp.net中客戶端與伺服器端的互動預設都是整頁面提交,此時客戶端將當前頁面表單中的資料(包括一些自動生成的隱藏域)都提交到伺服器端,伺服器重新例項化一個當前頁面類的例項響應這個請求,然後將整個頁面的內容重新發送到客戶端,這種處理方式對執行結果沒什麼影響,不過這種方式加重了網路的資料傳輸負擔、加大了伺服器的工作壓力,並且使用者還需要等待最終處理結果。假如是我們希望有這麼一個功能,當用戶填寫完使用者名稱之後就檢查伺服器資料庫裡是否已存在該使用者名稱,如果存在就給出已經存在此使用者名稱的提示,如果不存在就提示使用者此使用者名稱可用,對於這種情況其實只需要傳遞一個使用者名稱作為引數即可,上面的做法卻需要提交整個表單,有點小題大做。解決上面的問題的辦法目前主流做法有三種:純javascript實現、微軟Ajax類庫實現還有用AjaxPro實現。後兩種做法在稍後的文章中會講到,這裡我講另外一種實現:通過回撥技術。


建立實現回撥技術的網頁與普通asp.net網頁類似,只不過還需要做以下特殊工作:
(1)讓當前頁面實現ICallbackEventHandler介面,這個介面定義了兩個方法:string GetCallbackResult ()方法和void RaiseCallbackEvent (string eventArgument)方法。其中GetCallbackResult ()方法的作用是返回以控制元件為目標的回撥事件的結果,RaiseCallbackEvent()方法的作用是處理以控制元件為目標的回撥事件。
(2)為當前頁提供三個javascript客戶端指令碼函式。一個javascript函式用於執行對伺服器的實際請求,在這個函式中可以提供一個字串型別的引數傳送到伺服器端;另一個javascript函式用於接收伺服器端方法的執行後返回的字串型別結果,並處理這個結果;還有一個是執行對伺服器請求的幫助函式,在伺服器程式碼中通過GetCallbackEventReference()方法獲取這個方法的引用時由asp.net自動生成這個函式。
下面我以一個詳細的例子來講述如何使用回撥,用Dreamweaver建立一個Register. aspx頁面,程式碼如下:


 

  1. <%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %>
  2. <%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>
  3. <%@ Import Namespace="System.Text" %>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  5. <html xmlns="http://www.w3.org/1999/xhtml">
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  8. <title>使用者註冊</title>
  9. <script language="javascript">
  10. //客戶端執行的方法
  11. //下面的方法是接收並處理伺服器方法執行的返回結果
  12. function Success(args, context)
  13. {
  14.     message.innerText  = args;
  15. }
  16. //下面的方式是當接收伺服器方法處理的結果發生異常時呼叫的方法
  17. function Error(args, context)
  18. {
  19.     message.innerText  = '發生了異常';
  20. }
  21. </script>
  22. <script language="c#" runat="server">
  23. string result="";
  24. // 定義在伺服器端執行的回撥方法.
  25. public void RaiseCallbackEvent(String eventArgument)
  26. {
  27.  if(eventArgument.ToLower().IndexOf("admin")!=-1)
  28.  {
  29.   result=eventArgument+"不能作為使用者名稱註冊。";
  30.  }
  31.  else
  32.  {
  33.   result=eventArgument+"可以註冊。";
  34.  }
  35.  //throw new Exception();
  36. }
  37. //定義返回回撥方法執行結果的方法
  38. public string GetCallbackResult()
  39. {
  40.  return result;
  41. }
  42. //伺服器上執行的方法
  43. public void Page_Load(Object sender,EventArgs e)
  44. {
  45.  // 獲取當前頁的ClientScriptManager的引用
  46.     ClientScriptManager csm = Page.ClientScript;
  47.  // 獲取回撥引用。會在客戶端生成WebForm_DoCallback方法,呼叫它來達到非同步呼叫。這個方式是微軟寫的方法,會被髮送到客戶端
  48.  //注意這裡的"Success"和"Error"兩個字串分別客戶端程式碼中定義的兩個javascript函式
  49.  //下面的方法最後一個引數的意義:true表示執行非同步回撥,false表示執行同步回撥
  50.  String reference = csm.GetCallbackEventReference(this, "args","Success","","Error",false);
  51.  String callbackScript = "function CallServerMethod(args, context) {/n" + 
  52.   reference + ";/n }";
  53.  // 向當前頁面註冊javascript指令碼程式碼
  54.  csm.RegisterClientScriptBlock(this.GetType(), "CallServerMethod", 
  55.   callbackScript, true);
  56. }
  57. </script>
  58. </head>
  59. <body>
  60. <form id="form1" runat="server">
  61. <table border="1" cellpadding="0" cellspacing="0" width="400px">
  62. <tr>
  63. <td width="100px">使用者名稱</td><td><input type="text" size="10" maxlength="20" id="txtUserName" onblur="CallServerMethod(txtUserName.value,null)" /><span id="message"></span></td>
  64. </tr>
  65. <tr>
  66. <td>密碼</td><td><input type="password" size="10" maxlength="20" id="txtPwd" /></td>
  67. </tr>
  68. </

    相關推薦

    asp net夜話 Page技術

    分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

    Asp net夜話asp net內建物件

    分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

    asp net夜話八 資料繫結控制元件

    分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

    asp.net夜話十一:web.config詳解

    在開發中經常會遇到這樣的情況,在部署程式時為了保密起見並不將原始碼隨專案一同釋出,而我們開發時的環境與部署環境可能不一致(比如資料庫不一樣),如果在程式碼中儲存這些配置這些資訊部署時需要到使用者那裡更改程式碼再重新編譯,這種部署方式非常麻煩。在.net中提供了一種便捷的儲存專

    asp.net夜話七:ADO.NET介紹

    Asp.net夜話之七:ADO.NET介紹ADO.NET是對Microsoft ActiveX Data Objects (ADO)一個跨時代的改進,它提供了平臺互用性和可伸縮的資料訪問。由於傳送的資料都是XML格式的,因此任何能夠讀取XML格式的應用程式都可以進行資料處

    執行緒 -- 函式 [轉]

    由於在類中建立一個執行緒時要指定回撥函式的地址,這時候有兩種辦法:一是指定一個全域性的函式,二是指定類的static函式,但是如果我們想在static函式中訪問非static成員變數是個問題,可以如下來解決:   Thread.h #ifndef THREAD_H_H #def

    ASP.NET MVC 實現頁落網資源分享網站+充值管理+後臺管理(7)擴充套件基區域建立以及文字編輯配置

        一、擴充套件基類和區域建立     (1)在應用之前,我們先在表現層建立一個公共的系統擴充套件檔案來(SystemExtension)存放我們需要延伸和擴充套件的方法類。     在常規的專案系統操作中,我們都需要用到

    asp.net mvc 旅 —— 第站 從原始碼中分析asp.net mvc 中的TempData

    在mvc的controller中,我們知道有很多的臨時變數存放資料,比如說viewData,viewBag,還有一個比較特殊的tempData,關於前兩個或許大家都明白, 基本上是一個東西,就是各自的程式設計寫法不一樣,最終都會放到viewContext中,然後送到WebPa

    Asp.net MVC使用FormsAuthentication,MVCWEB API可以共享身份認證 (轉載)

    mlp ges web api nbsp 快速 charset 生成頁面 核心 lds 在實際的項目應用中,很多時候都需要保證數據的安全和可靠,如何來保證數據的安全呢?做法有很多,最常見的就是進行身份驗證。驗證通過,根據驗證過的身份給與對應訪問權限。同在Web Api中如何

    《C#圖解教程》讀書筆記四:繼承

    intern html pan 類中訪問 ted obj 小寫 his new 本篇已收錄至《C#圖解教程》讀書筆記目錄貼,點擊訪問該目錄可獲取更多內容。 一、萬物之宗:Object   (1)除了特殊的Object類,其他所有類都是派生類,即使他們沒有顯示基類定義。   

    ASP.NET Core配置環境變量啟動設置

    aspASPNETCORE_ENVIRONMENT  ASP.NET Core控制環境切換最核心的東西是“ASPNETCORE_ENVIRONMENT”環境變量,它直接控制當前應用程序運行的環境類型。您可以通過在項目上右鍵菜單選擇“屬性”選項,然後切換到“調試”標簽來修改此環境變量。    此環境變量框架默認

    ASP.NET 中JSON 的序列化反序列化

    urn 序列 del nbsp parseint 代碼 href end user JSON是專門為瀏覽器中的網頁上運行的JavaScript代碼而設計的一種數據格式。在網站應用中使用JSON的場景越來越多,本文介紹ASP.NET中JSON的序列化和反序列化,主要對JSON

    ASP.NET Core跨平臺的實時性能監控

    js應用程序的8個關鍵性能指標以及測量方法最後賣了個小關子,是關於如何監控ASP.NET Core的.今天我們就來講講如何監控它,下面上效果圖: 閱讀本文需要了解的相關技術與內容:InfluxDb(分布式時序數據庫,開源)(註:分布式部分已商業化最新的分布式版本已不在開源,單例的繼續開源)Grafana(開源

    asp.net mvcActionResult

    new 特殊 包含 string 工作 json數據 value orm none Web服務器接收到一個客戶端請求以後,會對請求予以相應,而這個響應是通過Response來控制的, 但是在asp.net mvc 裏,這部分的工作是由ActionResult來完成的,

    Java(對象中的例題)

    rec for spa text manage i+1 數值 jpg length 一、方法中的參數為數值型的(int) import java.util.Scanner; public class ScoreCalc { public void calc(i

    Asp.NET MVC 調試訪問 webservice 時出現“ 無法找到資源 ”的錯誤

    相對 mvc option logs 控制器 inf code 資源 index   問題情景如標題,具體錯誤如下圖:      出現以上情況,是程序將 .asmx 文件按控制器方式解析了,在 RouteConfig.cs 文件的 RegisterRoutes 方法中忽略

    Asp.net Core 初探(發布部署Linux)

    gin pro 1.0 connect 本地 部署 .dll vs2015 是我 Asp.net Core 初探(發布和部署Linux) 前言 俗話說三天不學習,趕不上劉少奇。Asp.net Core更新這麽長時間一直觀望,周末帝都小雨,宅在家看了下Co

    ASP.NET中JSON的序列化反序列化

    沒有 helper mic lar width pty on() dmi 包括 JSON是專門為瀏覽器中的網頁上運行的JavaScript代碼而設計的一種數據格式。在網站應用中使用JSON的場景越來越多,本文介紹ASP.NET中JSON的序列化和反序列化,主要對JSON的

    ASP.NET Core使用HttpClient的同步異步請求

    .text pcl gets 請求 con text timeout help ear using System; using System.Collections.Generic; using System.Net.Http; using System.Text

    ASP.NET MVC CodeFirst 數據遷移

    當我 mes mvc text -1 數據庫初始 有關 添加 generate CodeFirst模式下如果 一個 類的屬性 增加或者刪除 那麽 與其對應的 就是 數據庫中所對應的 字段 增加或者刪除 一個屬性變化還好 ,我們直接可以到數據庫中找到 ,所對應的表中,對其修改