Các giải pháp lập trình CSharp- P25 ppt

10 214 0
Các giải pháp lập trình CSharp- P25 ppt

Đang tải... (xem toàn văn)

Thông tin tài liệu

241 Chương 7: ASP.NET và Web Form } } private void cmdGetData_Click(object sender, System.EventArgs e) { lblData.Text = ""; // Kiểm tra thông tin trong view state. if (ViewState["TestData"] != null) { DateTime data = (DateTime)ViewState["TestData"]; lblData.Text += "<b>View state data:</b> " + data.ToString() + "<br>"; }else { lblData.Text += "No view state data found.<br>"; } // Kiểm tra thông tin trong session state. if (Session["TestData"] != null) { DateTime data = (DateTime)Session["TestData"]; lblData.Text += "<b>Session state data:</b> " + data.ToString() + "<br>"; }else { lblData.Text += "No session data found.<br>"; } // Kiểm tra thông tin trong cookie tùy biến. HttpCookie cookie = Request.Cookies["07-02"]; if (cookie != null) { string cookieData = (string)cookie["TestData"]; lblData.Text += "<b>Cookie data:</b> " + 242 Chương 7: ASP.NET và Web Form cookieData + "<br>"; }else { lblData.Text += "No cookie data found.<br>"; } } private void cmdClear_Click(object sender, System.EventArgs e) { ViewState["TestData"] = null; Session["TestData"] = null; // (Bạn cũng có thể sử dụng Session.Abandon để xóa tất cả // thông tin trong session state.) // Để xóa cookie, bạn phải thay nó thành // một cookie đã vượt quá ngày hết hiệu lực. HttpCookie cookie = new HttpCookie("07-02"); cookie.Expires = DateTime.Now.AddDays(-1); Response.Cookies.Add(cookie); } } Một kiểu trạng thái mà trang này không thể hiện là query string (chuỗi truy vấn). Query string đòi hỏi một chuyển hướng trang, lý tưởng cho việc chuyển thông tin từ trang này đến trang khác. Để thiết lập thông tin, bạn phải chuyển hướng người dùng đến một trang mới và thêm các đối số query string vào cuối URL. Bạn có thể sử dụng phương thức HttpServerUtility.UrlEncode và UrlDecode để bảo đảm dữ liệu chuỗi là URL hợp lệ. DateTime now = DateTime.Now; string data = Server.UrlEncode(now.ToString()); Response.Redirect("newPage.aspx?TestData=" + data); Để lấy thông tin này, bạn có thể sử dụng tập hợp HttpResponse.QueryString : // Kiểm tra thông tin trong query string. if (Request.QueryString["TestData"] != null) { string data = Request.QueryString["TestData"]; data = Server.UrlDecode(data); 243 Chương 7: ASP.NET và Web Form lblData.Text += "<b>Found query string data:</b> " + data + "<br>"; } 3. 3. T o các bi n thành viên có tr ng thái cho trangạ ế ạ T o các bi n thành viên có tr ng thái cho trangạ ế ạ   Bạn cần tạo các biến thành viên trong lớp trang và bảo đảm các giá trị của chúng được giữ lại khi trang được post-back.   Phản ứng với sự kiện Page.PreRender , và ghi tất cả các biến thành viên vào view state . Phản ứng với sự kiện Page.Load , và lấy tất cả các giá trị của các biến thành viên từ view state . Phần mã còn lại của bạn giờ đây có thể tương tác với các biến này mà không phải lo lắng các vấn đề về trạng thái. ASP.NET cung cấp nhiều cơ chế trạng thái, như đã được mô tả trong mục 7.2. Tuy nhiên, bạn không thể sử dụng chúng một cách tự động—tất cả đều đòi hỏi một đoạn mã để đặt thông tin vào và lấy thông tin ra. Bạn có thể thực hiện các công việc này một lần. Khi đó, phần mã còn lại của bạn có thể tương tác trực tiếp với biến thành viên. Để cách tiếp cận này có thể làm việc được, bạn cần đọc các giá trị của biến vào đầu mỗi postback. Sự kiện Page.Load là một chọn lựa lý tưởng cho đoạn mã này vì nó luôn phát sinh trước bất cứ sự kiện điều khiển nào khác. Bạn có thể sử dụng phương thức thụ lý sự kiện Page.Load để khởi dựng tất cả các biến. Ngoài ra, bạn cần lưu trữ tất cả các biến trước khi trang được gửi cho người dùng, sau khi tất cả việc xử lý đã hoàn tất. Trong trường hợp này, bạn có thể đáp ứng cho sự kiện Page.PreRender , vì sự kiện này phát sinh sau tất cả các phương thức thụ lý sự kiện khác, chỉ trước khi trang được chuyển thành HTML và gửi cho client. Trang ví dụ sau đây trình bày cách duy trì một biến thành viên của trang có tên là memberValue : using System; using System.Web; using System.Web.UI.WebControls; public class StatefulMembers : System.Web.UI.Page { // (Bỏ qua phần mã designer.) private int memberValue = 0; private void Page_Load(object sender, System.EventArgs e) { // Nạp lại tất cả các biến thành viên. if (ViewState["memberValue"] != null) { memberValue = (int)ViewState["memberValue"]; 244 Chương 7: ASP.NET và Web Form } } private void StatefulMembers_PreRender(object sender, System.EventArgs e) { // Lưu tất cả các biến thành viên. ViewState["memberValue"] = memberValue; // Hiển thị giá trị. lblCurrent.Text = memberValue.ToString(); } // (Các phương thức thụ lý sự kiện khác giờ đây // có thể làm việc trực tiếp với memberValue.) } 4. 4. Đáp ng các s ki n phía client v i JavaScriptứ ự ệ ớ Đáp ng các s ki n phía client v i JavaScriptứ ự ệ ớ   Bạn cần thêm mã JavaScript vào một Web Form .   Định nghĩa hàm JavaScript trong một chuỗi, và sử dụng phương thức Page.RegisterClientScriptBlock để chèn hàm JavaScript vào trang được trả về. Khi đó, bạn có thể thêm các đặc tính điều khiển để gọi các hàm này. ASP.NET là một mô hình lập trình đa năng. Đáng tiếc, một khi trang đã được trả về dạng HTML, bạn không thể thực thi bất kỳ mã .NET nào nữa mà không phải phát sinh postback đến server. Hạn chế này làm giảm tính hiệu quả của các trang web có tính tương tác (chẳng hạn, xác nhận tính hợp lệ của đầu vào). Dĩ nhiên, không có lý do gì khiến bạn không thể trộn chức năng JavaScript phía client vào mã .NET. Mặc dù .NET không chứa bất kỳ giao diện đối tượng nào để tạo JavaScript, nhưng bạn có thể chèn nó vào trang bằng tay. Có một cách để thực hiện việc này là thiết lập đặc tính điều khiển. Ví dụ, TextBox dưới đây sẽ hiển thị một MessageBox khi nó mất focus: TextBox1.Attributes.Add("onBlur", "alert('The TextBox has lost focus!');"); Thẻ TextBox sẽ được trả về dạng HTML như sau: <input name="TextBox1" type="text" id="TextBox1" onBlur="alert('The text box has lost focus!');" /> 245 Chương 7: ASP.NET và Web Form Trong trường hợp này, bạn sử dụng hàm JavaScript alert (nội tại) và sự kiện JavaScript onBlur (phát sinh khi một điều kiểm mất focus). Hầu hết các phần tử HTML đều hỗ trợ các sự kiện sau đây: • onFocus  xảy ra khi một điều kiểm nhận focus. • onBlur  xảy ra khi một điều kiểm mất focus. • onClick  xảy ra khi người dùng nhắp vào một điều kiểm. • onChange  xảy ra khi người dùng thay đổi giá trị của điều kiểm nào đó. • onMouseOver  xảy ra khi người dùng di chuyển con trỏ chuột trên một điều kiểm. Một cách khác để chèn mã JavaScript là định nghĩa một hàm JavaScript trong một biến chuỗi rồi lệnh cho ASP.NET chèn nó vào trang web được trả về. Nếu làm theo cách này, bất kỳ điều kiểm nào cũng có thể gọi hàm để đáp ứng cho một sự kiện JavaScript. Ví dụ dưới đây sẽ làm rõ kỹ thuật này bằng một trang web gồm một bảng và một bức hình (xem hình 7.2). Khi người dùng di chuyển chuột lên các ô trong bảng thì hai hàm JavaScript tùy biến sẽ được sử dụng: một tạo highlight cho ô hiện tại và một gỡ bỏ highlight khỏi ô trước đó. Ngoài ra, hàm tạo highlight còn thay đổi URL của bức hình tùy thuộc vào cột nào đang được chọn. Nếu người dùng đưa chuột lên cột thứ nhất, hình mặt cười sẽ được hiển thị. Nếu người dùng đưa chuột lên cột thứ hai hoặc thứ ba, hình quyển sách với dấu chấm hỏi nhấp nháy sẽ được hiển thị. using System; using System.Web; using System.Web.UI.WebControls; public class JavaScriptTest : System.Web.UI.Page { protected System.Web.UI.WebControls.Table Table1; protected System.Web.UI.WebControls.Image Image1; // (Bỏ qua phần mã designer.) private void Page_Load(object sender, System.EventArgs e) { // Định nghĩa các hàm JavaScript. string highlightScript = "<script language=JavaScript> " + "function HighlightCell(cell) {" + "cell.bgColor = '#C0C0C0';" + "if (cell.cellIndex == 0) {" + "document.Form1.Image1.src='happy_animation.gif';}" + "else {" + "document.Form1.Image1.src='question_animation.gif';}" + 246 Chương 7: ASP.NET và Web Form ";}" + "</script>"; string unhighlightScript = "<script language=JavaScript> " + "function UnHighlightCell(cell) {" + "cell.bgColor = '#FFFFFF';" + "}" + "</script>"; // Chèn hàm JavaScript vào trang (nó sẽ xuất hiện // ngay sau thẻ <form runat=server>). // Chú ý rằng mỗi khối kịch bản được kết hợp với một tên chuỗi. // Điều này cho phép nhiều điều kiểm đăng ký cùng khối kịch bản, // trong khi vẫn bảo đảm nó sẽ được trả về chỉ một lần // trong trang cuối cùng. if (!this.IsClientScriptBlockRegistered("Highlight")) { Page.RegisterClientScriptBlock("Highlight", highlightScript); } if (!this.IsClientScriptBlockRegistered("UnHighlight")) { Page.RegisterClientScriptBlock("UnHighlight", unhighlightScript); } // Thiết lập đặc tính cho mỗi ô trong bảng. foreach (TableRow row in Table1.Rows) { foreach (TableCell cell in row.Cells) { cell.Attributes.Add("onMouseOver", "HighlightCell(this);"); cell.Attributes.Add("onMouseOut", "UnHighlightCell(this);"); } } } 247 Chương 7: ASP.NET và Web Form Hình 7.2 Hàm JavaScript tạo highlight cho ô hiện tại  Bạn cần hiểu rõ tính bảo mật của JavaScript . Tất cả mã JavaScript được trả về trực tiếp trong trang HTML , và người dùng có thể xem xét nó. Do đó, bạn đừng bao giờ đặt bất kỳ giải thuật hoặc thông tin bí mật nào vào mã JavaScript . Ngoài ra, bạn sử dụng JavaScript để kiểm tra tính hợp lệ chỉ là một tiểu xảo, không phải là một phương cách để ngăn các hành động không hợp lệ, bởi người dùng có thể vô hiệu hoặc phá hỏng JavaScript trong trình duyệt của họ. 5. 5. Hi n th c a s pop-up v i JavaScriptể ị ử ổ ớ Hi n th c a s pop-up v i JavaScriptể ị ử ổ ớ   Bạn cần hiển thị một cửa sổ pop-up để đáp ứng cho một hành động của người dùng.   Đăng ký một hàm JavaScript (hoặc thêm một đặc tính điều khiển sự kiện), và sử dụng hàm JavaScript window.open . Vì tất cả mã ASP.NET thực thi trên server nên không có cách nào để hiển thị một cửa sổ mới từ mã C#. Bạn có thể thêm siêu liên kết vào một trang sao cho nó tự động mở trong một cửa sổ mới bằng cách thiết lập đặc tính target của thẻ <a> là _blank , nhưng cách này vẫn không cung cấp khả năng điều khiển kích thước hoặc kiểu của cửa sổ. Giải pháp để mở cửa sổ pop-up là sử dụng mã JavaScript. Cửa sổ pop-up có thể là một trang HTML, một trang ASP.NET, một file hình, hoặc bất kỳ kiểu tài nguyên nào có thể được mở trong trình duyệt của client. Để mở một cửa sổ pop-up, bạn cần sử dụng hàm window.open và chỉ định ba thông số. Thông số thứ nhất là liên kết đến trang mới, thông số thứ hai là tên frame của cửa sổ, và thông số thứ ba là một chuỗi các đặc tính (phân cách bằng dấu phẩy) cấu hình kiểu và kích thước của cửa sổ pop-up. Các đặc tính này bao gồm: • Đặc tính height và width —được thiết lập là các giá trị tính theo pixel. 248 Chương 7: ASP.NET và Web Form • Đặc tính toolbar , menubar , và scrollbars —có thể được thiết lập là yes hay no , tùy thuộc vào bạn muốn hiển thị các phần tử này hay không. • Đặc tính resizable —có thể được thiết lập là yes hay no , tùy thuộc vào bạn muốn đường viền cửa sổ là cố định hay có thể thay đổi kích thước được. Ví dụ dưới đây trình bày cách mở một trang ASP.NET thứ hai trong một cửa sổ pop-up khi người dùng nhắp vào một Button . Hình 7.3 Hiển thị cửa sổ pop-up Bạn cần thêm đoạn mã này vào phương thức thụ lý sự kiện Page.Load . string popupScript = "window.open('PopUp.aspx', " + "'CustomPopUp', " + "'width=200, height=200, menubar=yes, resizable=no')"; cmdPopUp.Attributes.Add("onClick", popupScript); Và đây là đoạn mã (trong phương thức thụ lý sự kiện Page.Load ) dùng để hiển thị cửa sổ pop- up một cách tự động khi trang được hiển thị: string popupScript = "<script language='javascript'>" + "window.open('PopUp.aspx', " + "'CustomPopUp', " + "'width=200, height=200, menubar=yes, resizable=no')" + "</script>"; 249 Chương 7: ASP.NET và Web Form Page.RegisterStartupScript("PopupScript", popupScript); 6. 6. Thi t l p focus cho đi u ki mế ậ ề ể Thi t l p focus cho đi u ki mế ậ ề ể   Bạn cần chỉ định điều kiểm nào sẽ nhận focus khi trang được trả về và gửi cho người dùng.   Tạo một lệnh JavaScript để thiết lập focus, và thêm nó vào trang bằng phương thức Page.RegisterStartupScript . Điều kiểm web ASP.NET không cung cấp cách để thiết lập focus cho điều kiểm, mà chỉ cung cấp thuộc tính TabIndex để thiết lập thứ tự tab. Nhưng thuộc tính này chỉ áp dụng cho Microsoft Internet Explorer và không thể được sử dụng để thiết lập focus cho điều kiểm do bạn chọn. Để vượt qua hạn chế này, bạn cần sử dụng đến mã JavaScript. Phương thức dưới đây sẽ thực hiện công việc này. Nó nhận vào một tham chiếu đến bất kỳ đối tượng điều kiểm nào, thu lấy ClientID kết giao (mã JavaScript phải sử dụng ID này để tìm đến điều kiểm), rồi tạo dựng và đăng ký kịch bản để thiết lập focus. private void SetFocus(Control ctrl) { // Định nghĩa lệnh JavaScript. // Di chuyển focus đến điều kiểm bạn muốn. string setFocus = "<script language='javascript'>" + "document.getElementById('" + ctrl.ClientID + "').focus();</script>"; // Thêm mã JavaScript vào trang. this.RegisterStartupScript("SetFocus", setFocus); } Nếu thêm phương thức này vào một Web Form, bạn có thể gọi SetFocus khi cần. Ví dụ dưới đây sẽ thiết lập focus khi trang nạp lần đầu tiên: private void Page_Load(object sender, System.EventArgs e) { if (!this.IsPostBack) { // Chuyển focus đến một TextBox cụ thể. SetFocus(TextBox1); } } 250 Chương 7: ASP.NET và Web Form 7. 7. Cho phép ng i dùng upload fileườ Cho phép ng i dùng upload fileườ   Bạn cần tạo một trang cho phép người dùng upload một file.   Sử dụng điều kiểm HtmlInputFile , thiết lập kiểu mã hóa của form là multipart/form-data , và lưu file bằng phương thức HtmlInputFile.PostedFile. SaveAs . Vì ASP.NET thực thi trên server nên không có cách nào để truy xuất các tài nguyên trên máy client, bao gồm file. Tuy nhiên, bạn có thể sử dụng điều kiểm System.Web.UI. HtmlControls.HtmlInputFile để cho phép người dùng upload một file. Điều kiểm này trả về phần tử HTML <input type="file"> , hiển thị một nút Browse và một hộp chứa tên file. Người dùng nhắp vào nút Browse và chọn một file. Bước này diễn ra một cách tự động và không đòi hỏi bất kỳ đoạn mã tùy biến nào. Sau đó, người dùng phải nhắp vào một nút khác (bạn phải tạo nút này) để bắt đầu quá trình upload. Để tạo một trang cho phép upload file, bạn cần thực hiện các bước sau đây: • Thiết lập kiểu mã hóa của form là multipart/form-data . Để thực hiện thay đổi này, tìm thẻ <form> trong file .aspx và điều chỉnh như sau: <form id="Form1" enctype="multipart/form-data" runat="server"> • Thêm điều kiểm HtmlInputFile vào trang. Trong Microsoft Visual Studio .NET, bạn sẽ tìm thấy điều kiểm này dưới thẻ HTML của hộp công cụ, với tên là File Field. Một khi đã thêm điều kiểm này, bạn nhắp phải vào nó và chọn Run As Server Control để tạo thẻ <input type="file" runat="server"> . • Thêm một Button khác để bắt đầu quá trình chuyển giao file đã được chỉ định (bằng phương thức HtmlInputFile.PostedFile.SaveAs ). Dưới đây là phần mã cho trang upload file: using System; using System.Web; using System.Web.UI.WebControls; using System.IO; public class UploadPage : System.Web.UI.Page { protected System.Web.UI.WebControls.Label lblInfo; protected System.Web.UI.WebControls.Button cmdUpload; protected System.Web.UI.HtmlControls.HtmlInputFile FileInput; // (Bỏ qua phần mã designer.) . ba là một chuỗi các đặc tính (phân cách bằng dấu phẩy) cấu hình kiểu và kích thước của cửa sổ pop-up. Các đặc tính này bao gồm: • Đặc tính height và width —được thiết lập là các giá trị tính. JavaScript vào trang được trả về. Khi đó, bạn có thể thêm các đặc tính điều khiển để gọi các hàm này. ASP.NET là một mô hình lập trình đa năng. Đáng tiếc, một khi trang đã được trả về dạng. "<br>"; } 3. 3. T o các bi n thành viên có tr ng thái cho trangạ ế ạ T o các bi n thành viên có tr ng thái cho trangạ ế ạ   Bạn cần tạo các biến thành viên trong lớp trang và bảo đảm các giá trị của

Ngày đăng: 08/07/2014, 17:20

Từ khóa liên quan

Mục lục

  • LỜI NÓI ĐẦU

  • CẤU TRÚC CỦA SÁCH

  • QUY ƯỚC

  • YÊU CẦU VỀ HỆ THỐNG

  • CÁCH SỬ DỤNG ĐĨA CD

  • MỤC LỤC

  • Chương 1:PHÁT TRIỂN ỨNG DỤNG

    • 1. Tạo ứng dụng Console

    • 2. Tạo ứng dụng dựa-trên-Windows

    • 3. Tạo và sử dụng module

    • 4. Tạo và sử dụng thư viện

    • 5. Truy xuất các đối số dòng lệnh

    • 6. Chọn biên dịch một khối mã vào file thực thi

    • 8. Tạo và quản lý cặp khóa tên mạnh

    • 9. Tạo tên mạnh cho assembly

    • 10. Xác minh một assembly tên mạnh không bị sửa đổi

    • 11. Hoãn việc ký assembly

    • 12. Ký assembly với chữ ký số Authenticode

    • 13. Tạo và thiết lập tin tưởng một SPC thử nghiệm

    • 14. Quản lý Global Assembly Cache

    • 15. Ngăn người khác dịch ngược mã nguồn của bạn

Tài liệu cùng người dùng

Tài liệu liên quan