1. 使用 <%$ expressionPrefix: expressionValue %> 支援從配置檔案web.config 中取得連接配接字元串和應用程式設定,或從資源檔案(.resx 或 .resource)中取得特定項的設定值。
(1)使用<%$ ConnectionStrings: 配置檔案中的連接配接字元串名稱CONNECTION STRING NAME %>
(2)使用<%$ AppSettings: 配置檔案中appSettings中的配置KEY %>
(3)使用<%$ Resources: Class, ResourceID %> 取得資源檔案中的設定。
上面的Class 就是資源檔案的主檔案名,如Message.resx 資源檔案的 Message 檔案名稱;ResourceID 則是所要取得的資源項目的名稱。
2. 怎樣在網頁中檢測浏覽器的類型和版本
可以使用HttpRequest.Browser 屬性查詢浏覽器,HttpRequest.Browser 屬性有一個HttpBrowserCapabilities 對象,該對象會取得浏覽器或用戶端裝置的資訊。示例代碼如下:
StringBuilder sb = new StringBuilder();
HttpBrowserCapabilities bc = Request.Browser;
sb.AppendLine("浏覽器的相關規格與資訊:");
sb.AppendLine("類型: " + bc.Type);
sb.AppendLine("名稱: " + bc.Browser);
sb.AppendLine("版本: " + bc.Version);
sb.AppendLine("主要版本: " + bc.MajorVersion);
sb.AppendLine("次要版本: " + bc.MinorVersion);
sb.AppendLine("作業平台: " + bc.Platform);
sb.AppendLine("是 Beta 版嗎: " + bc.Beta);
sb.AppendLine("是 Crawler 搜尋引擎嗎: " + bc.Crawler);
sb.AppendLine("是 AOL 浏覽器嗎: " + bc.AOL);
sb.AppendLine("是 Win16 計算機嗎: " + bc.Win16);
sb.AppendLine("是 Win32 計算機嗎: " + bc.Win32);
sb.AppendLine("是否支援架構: " + bc.Frames);
sb.AppendLine("是否支援表格: " + bc.Tables);
sb.AppendLine("是否支援 Cookies: " + bc.Cookies);
sb.AppendLine("是否支援 VB Script: " + bc.VBScript);
sb.AppendLine("是否支援 JavaScript: " + bc.EcmaScriptVersion.ToString());
sb.AppendLine("是否支援 Java Applets: " + bc.JavaApplets);
sb.AppendLine("是否支援 ActiveX 控件: " + bc.ActiveXControls);
sb.AppendLine("是否支援頻道定義格式: " + bc.CDF);
TextBox1.Text = sb.ToString();
上述代碼的運作結果:浏覽器的相關規格與資訊:
類型: IE8
名稱: IE
版本: 8.0
主要版本: 8
次要版本: 0
作業平台: WinNT
是 Beta 版嗎: False
是 Crawler 搜尋引擎嗎: False
是 AOL 浏覽器嗎: False
是 Win16 計算機嗎: False
是 Win32 計算機嗎: True
是否支援架構: True
是否支援表格: True
是否支援 Cookies: True
是否支援 VB Script: True
是否支援 JavaScript: 1.2
是否支援 Java Applets: True
是否支援 ActiveX 控件: True
是否支援頻道定義格式: False
3. 網頁之間怎麼傳遞資料
(1)通過在URL中使用查詢字元串傳遞資料;
(2)Server.Transfer 方法傳遞資料;
SOURCEPAGE frmSource = ((SOURCEPAGE) (HttpContext.Current.Handler));
取得源網頁對象,然後就可以取得其公有屬性了。
(3)跨網頁傳送資料的方式;
在目标頁面,通過如下方式取得SOURCE PAGE:
if(Page.PreviousPage != null)
{
TextBox txtName = (TextBox) Page.PreviousPage.FindControl("txtName");
....................
}
還有一種辦法是,通過在目标頁面添加一個 @PreviousPageType 訓示符:
<%@ PreviousPageType VirtualPath="~/SOURCEPAGE.aspx"%>
這樣,就可以取得代表源網頁的強類型引用了 -- PreviousPage 屬性,通過PreviousPage 屬性取得源網頁的公有屬性。
另外一個辦法是,在目标頁面使用 @Reference 訓示符:
<%@ Reference Page="~/SOURCEPAGE.aspx" %>
範例代碼:
if (Page.PreviousPage != null)
{
// 取得來源網頁之各個控件的值。
textboxName.Text = ((TextBox)(this.PreviousPage.FindControl("txtName"))).Text;
textboxAddress.Text = ((TextBox)(this.PreviousPage.FindControl("txtAddress"))).Text;
textboxPhone.Text = ((TextBox)(this.PreviousPage.FindControl("txtPhone"))).Text;
textboxGender.Text = ((RadioButtonList)(this.PreviousPage.FindControl("rblGender"))).SelectedValue;
textboxJob.Text = ((DropDownList)(this.PreviousPage.FindControl("ddlJob"))).SelectedValue;
// 将 PreviousPage 屬性轉換成來源網頁型别。
SOURCEPAGE mySourcePage = (SOURCEPAGE)PreviousPage;
// 取得來源網頁之各個公用屬性的值。
lblName.Text = mySourcePage.Author;
lblCompany.Text = mySourcePage.Company;
lblAddress.Text = mySourcePage.Address;
lblRequestTime.Text = mySourcePage.RequestTime;
}
(4)不同Web應用程式中網頁的跨網頁資料傳送
在目标網頁中通過 Request.Form 來讀取傳送的值,Request.Form 會傳回一個NameValueCollection 的字典集合,含有索引key 和 資料值的配對。
System.Text.StringBuilder sb = new System.Text.StringBuilder();
System.Collections.Specialized.NameValueCollection postedValues = Request.Form;
String nextKey;
for (int i = 0; i < postedValues.AllKeys.Length; i++)
nextKey = postedValues.AllKeys[i];
sb.Append("<br>");
sb.Append(nextKey);
sb.Append(" = ");
sb.Append(postedValues[i]);
lblMessage.Text = sb.ToString();
4. 設定網頁的預設焦點控件和預設按鈕
<form id="form1" runat="server" defaultbutton="btnSearch" defaultfocus="txtTarget">
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnaucDNhZDOxkzN5gDO5MWZjFzMjJTMzUWOklTYmRmMkNmNfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.jpg)
隻有實作了 IButtonControl 接口的控件才能被設定為預設按鈕,也就是說,隻有 Button, LinkButton 和 ImageButton 伺服器控件才能設定為預設按鈕。
5. 讓網頁到約定幾秒自動重定向到其他的頁面
<head id="Head1" runat="server">
<meta http-equiv="REFRESH" content="3; URL=http://www.entlib.com" />
<title>倒數 3 秒後自動重定向到其他網頁</title>
</head>
通過程式控制為網頁添加meta 标記:
protected void Page_Load(object sender, EventArgs e)
{
HtmlMeta meta = new HtmlMeta();
meta.Attributes.Add("http-equiv", "REFRESH");
meta.Content = "3; URL=http://www.entlib.com";
this.Header.Controls.Add(meta);
}
6. Literal 控件和 Label 控件的差別
Label 伺服器控件的文本在顯示為網頁時,使用HTML 的<span> 标記,而Literal 伺服器控件的文本在顯示網頁中時,不會添加 <span> 标記和任何其他的 HTML 标記。
Literal 控件提供的 Mode 屬性可以對 Text 屬性的内容進行設定是否編碼,有如下可行值。
LiteralMode.PassThrough
LiteralMode.Encode
LiteralMode.Transform
示例代碼:
// 建立一個 Literal 伺服器控件。
Literal MyLiteral1 = new Literal();
MyLiteral1.Mode = LiteralMode.PassThrough;
MyLiteral1.Text = "現在的日期時間是: <b><font color = 'red'>" + System.DateTime.Now + "</font></b>";
// 将 Literal 伺服器控件動态加入 Panel 容器中。
MyPanel1.Controls.Add(MyLiteral1);
Literal MyLiteral2 = new Literal();
// 要求使用 HtmlEnocde 方法來編碼 Text 屬性的内容。
MyLiteral2.Mode = LiteralMode.Encode;
MyLiteral2.Text = "現在的日期時間是: <b><font color = 'red'>" + System.DateTime.Now + "</font></b>";
MyPanel2.Controls.Add(MyLiteral2);
7. 資料類型驗證
CompareValidator 驗證控件可以驗證輸入到控件中的資料能否轉換成特定的資料類型。方法是:
(1)将Type 屬性設定成需要檢查的資料類型;
(2)必須将Operator 屬性設定為 DataTypeCheck;
請輸入您所要查詢的員工的出生日期:
<br />
請輸入下限:
<asp:TextBox ID="txtBirthdayLowerLimit" runat="server"></asp:TextBox>
<asp:CompareValidator ID="CompareValidator1" runat="server" ErrorMessage="" ControlToValidate="txtBirthdayLowerLimit"
Display="Dynamic"
Operator="DataTypeCheck" SetFocusOnError="True"
Type="Date">您輸入的日期格式不正确!</asp:CompareValidator>
請輸入上限:
<asp:TextBox ID="txtBirthdayUpperLimit" runat="server"></asp:TextBox>
<asp:CompareValidator ID="CompareValidator2" runat="server" ErrorMessage="" ControlToValidate="txtBirthdayUpperLimit"
Display="Dynamic" Operator="DataTypeCheck" SetFocusOnError="True" Type="Date">您輸入的日期格式不正确!</asp:CompareValidator>
格式驗證
若要檢查使用者輸入的資料是否符合特定的格式,可使用 RegularExpressionValidator 驗證控件。在使用 RegularExpressionValidator 驗證控件時,除了設定 ControlToValidate, Text, Display 等屬性外,還需要設定 ValidationExpression 屬性的正規表達式。
如下範例代碼:
<div>
公司網址:
<asp:TextBox id="txtUrl" runat="server" Width="289px"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtUrl"
Display="Dynamic">必須輸入資料,不可以空白!</asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="txtUrl"
Display="Dynamic" ValidationExpression="
電子郵件:
<asp:TextBox ID="txtEmail" runat="server" Width="284px"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="txtEmail"
<asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" Display="Dynamic"
ControlToValidate="txtEmail" ValidationExpression="^[\w-]+@[\w-]+\.(com|net|org|edu|mil)$">請輸入格式正确的電子郵件!</asp:RegularExpressionValidator>
市内電話:
<asp:TextBox ID="txtPhone" runat="server" Width="236px"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="txtPhone"
<asp:RegularExpressionValidator ID="RegularExpressionValidator3" runat="server" Display="Dynamic"
ControlToValidate="txtPhone" ValidationExpression="((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}">請按照 (XXX)XXX-XXXX 格式輸入電話号碼!</asp:RegularExpressionValidator>
郵政編碼:
<asp:TextBox ID="txtZipCode" runat="server" Width="140px"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ControlToValidate="txtZipCode"
<asp:RegularExpressionValidator ID="RegularExpressionValidator4" runat="server" Display="Dynamic"
ControlToValidate="txtZipCode" ValidationExpression="^\d{5}$">郵政編碼必須是 5 個數字!</asp:RegularExpressionValidator>
<asp:Button ID="btnOk" runat="server" Text="确定" Font-Size="Small"></asp:Button>
</div>
RangeValidator 控件 -- 驗證使用者輸入的資料必須處于特定的範圍。需要提醒的是 Type 屬性需要設定為所需的資料類型,如果使用者的輸入值不能轉換成指定的資料類型,則驗證将失敗。
範例代碼如下所示:
購買數量:
<asp:TextBox ID="txtAmount" runat="server" Font-Size="12pt"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" Display="Dynamic"
ControlToValidate="txtAmount">必須輸入資料!</asp:RequiredFieldValidator>
<asp:RangeValidator ID="RangeValidator2" runat="server" Display="Dynamic" ControlToValidate="txtAmount"
Type="Integer" MaximumValue="2000" MinimumValue="100">格式不正确或購買數量不在 100 至 2000之間</asp:RangeValidator>
8. 如何禁用驗證和以程式方式來驗證ASP.NET伺服器控件
如果想禁用伺服器端和用戶端驗證,可以将單個控件的 CausesValidation 屬性設定為 false,這樣做将可以觸發回送,而不會引發驗證檢查。
如下範例代碼,将btnCancel 控件關閉驗證:
<asp:Button ID="btnCancel" runat="server" Font-Size="11pt" Text="不驗證直接傳送"
CausesValidation="False">
</asp:Button>
以程式方式來驗證ASP.NET 伺服器控件
如果希望網頁在第一次運作時,就顯示驗證控件的提示資訊,可以在網頁第一次運作時就調用網頁的 Validate 方法,因為此時各個輸入控件都是空白的,自然就不能通過驗證了。
if (!IsPostBack)
Page.Validate();
調用驗證控件的Validate 方法
另外一種情況時,需要在運作時才能設定驗證控件的相關屬性,是以需要在程式中手動調用驗證控件的Validate 方法。
如下範例代碼在程式中設定 RangeValidator 控件的 MinimumValue 屬性 和 MaximumValue 屬性,以及其他屬性,然後調用該驗證控件的Validate 方法:
protected void btnSetDate_Click(object sender, EventArgs e)
// 設定下限值
this.AnserDateRangeValidator.MinimumValue = this.txtStartDate.Text;
// 設定上限值
this.AnserDateRangeValidator.MaximumValue = this.txtEndDate.Text;
this.AnserDateRangeValidator.Type = ValidationDataType.Date;
this.AnserDateRangeValidator.ErrorMessage = "您輸入的賣出日期必須處于買進日期與結算日期之間";
this.AnserDateRangeValidator.Display = ValidatorDisplay.Dynamic;
// 呼叫 Validate 方法
this.AnserDateRangeValidator.Validate();
// 顯示出「期貨賣出日期」文字方塊
this.txtAnswerDate.Visible = true;
該驗證控件的頁面代碼:
<asp:RangeValidator ID="AnserDateRangeValidator" runat="server" ControlToValidate="txtAnswerDate">
</asp:RangeValidator>