tổng hợp các thủ thuật lập trình aspnet

18
Tổng hợp các thủ thuật lập trình asp.net - Phần 1 Ngày đăng: 12/12/2010 Lượt xem:1692 Đăng bởi: admin Trong bài viết này tôi sẽ tìm lại và tổng hợp các thủ thuật khi lập trình với asp.net. Có thể nó sẽ giảm bớt công sức khi bạn lập trình. Tôi sẽ chia làm nhiều phần, mỗi phần tôi sẽ post 10 thủ thuật hy vong sẽ giúp ích cho các bạn thủ thuật , lập trình , thủ thuật lập trình , asp.net , 1. Kiểm tra FileUpload chỉ có thể là file ảnh Để tải lên hình ảnh đến máy chủ từ một ứng dụng web Asp.Net, Bạn sử dụng FileUpload. Nhưng bạn chỉ muốn giới hạn chỉ cho upload file ảnh thôi => Sử dụng RegularExpressionValidator như minh họa dưới đây <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="FileUpload1" ErrorMessage="Không phải file ảnh" ValidationExpression= "^([0-9a-zA-Z_\-~ :\\])+(.jpg|.JPG|.jpeg|.JPEG|.bmp|.BMP|.gif|.GIF|.png|.PNG) $"> </asp:RegularExpressionValidator> 2. Tạo nhiều QueryString từ Hyperlink NavigateUrl trong GridView Trong Gridview khi bạn muốn một trường nào đó là liên kết và bạn muốn truyền các QueryString hoặc Parameter để ở trang chuyển tiếp bạn có thể Request được các Parameter này. - Nếu là trường được convert thành TemplateField bạn dùng như minh họa sau: <asp:HyperLink ID="HyperLink1" runat="server" Text="View Data" NavigateUrl='<%# String.Format("TestPage.aspx? param1={0}&param2={1}&param3={2}", Eval("Field1"), Eval("Field2"), Eval("Field2")) %>'></asp:HyperLink>

Upload: tran-van

Post on 12-Sep-2014

130 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tổng hợp các thủ thuật lập trình aspnet

Tổng hợp các thủ thuật lập trình asp.net - Phần 1Ngày đăng: 12/12/2010 Lượt xem:1692   Đăng bởi: admin

Trong bài viết này tôi sẽ tìm lại và tổng hợp các thủ thuật khi lập trình với asp.net. Có thể nó sẽ giảm bớt công sức khi bạn lập trình. Tôi sẽ chia làm nhiều phần, mỗi phần tôi sẽ post 10 thủ thuật hy vong sẽ giúp ích cho các bạn

thủ thuật, lập trình, thủ thuật lập trình, asp.net,

1. Kiểm tra FileUpload chỉ có thể là file ảnh

Để tải lên hình ảnh đến máy chủ từ một ứng dụng web Asp.Net, Bạn sử dụng FileUpload. Nhưng bạn chỉ muốn giới hạn chỉ cho upload file ảnh thôi => Sử dụng RegularExpressionValidator như minh họa dưới đây

<asp:FileUpload ID="FileUpload1" runat="server" /> <asp:RegularExpressionValidator

ID="RegularExpressionValidator1" runat="server" ControlToValidate="FileUpload1" ErrorMessage="Không phải file ảnh" ValidationExpression=

"^([0-9a-zA-Z_\-~ :\\])+(.jpg|.JPG|.jpeg|.JPEG|.bmp|.BMP|.gif|.GIF|.png|.PNG)$"> </asp:RegularExpressionValidator>

2. Tạo nhiều QueryString từ Hyperlink NavigateUrl trong GridView

Trong Gridview khi bạn muốn một trường nào đó là liên kết và bạn muốn truyền các QueryString hoặc Parameter để ở trang chuyển tiếp bạn có thể Request được các Parameter  này.

    - Nếu là trường được convert thành TemplateField bạn dùng như minh họa sau:

<asp:HyperLink ID="HyperLink1" runat="server" Text="View Data" NavigateUrl='<%# String.Format("TestPage.aspx?param1={0}&param2={1}&param3={2}", Eval("Field1"), Eval("Field2"), Eval("Field2")) %>'></asp:HyperLink>

    - Nếu là HyperLinkField

<asp:HyperLinkField DataNavigateUrlFields="Field1,Field2,Field3" DataNavigateUrlFormatString="TestPage.aspx?param1={0}&param2={1}&param3={2}" Text="View Data" />

Hãy thay các  Field1, Field2, ... Thành các tên trường dữ liệu của bạn

3. Giới hạn chỉ nhập số  trong Textbox

Page 2: Tổng hợp các thủ thuật lập trình aspnet

Để giới hạn khi người dùng chỉ có thể nhập ký tự số (số chứng minh thư chẳng hạn) trong textbox bạn có thể dùng FilteredTextBoxExtender của AjaxControl toolkit như sau:

<asp:TextBox ID="txtCMT" Width="50px" runat="server" /><cc1:FilteredTextBoxExtender ID="ftbeCMT" runat="server" Enabled="True" FilterType="Numbers" TargetControlID="txtCMT" />

Nếu không dùng ajax bạn cần viết hàm javascript như sau:

function onlyNumbers(evt) { var e = event || evt; var charCode = e.which || e.keyCode; if (charCode > 31 && (charCode < 48 || charCode > 57)) return false; return true;}

Trong Textbox bạn sửa lại thành:

<asp:TextBox ID="txtCMT" runat="server" onkeypress="return onlyNumbers();" />

4. Tính số ngày, tháng, năm giữa hai mốc thời gianTham khảo ví dụ sau

DateTime date1 = Convert.ToDateTime("2008/01/01");DateTime date2 = Convert.ToDateTime("2010/12/31");TimeSpan timespan = date2.Subtract(date1);int intDays = timespan.Days;double intMonths = Math.Floor(intDays / 30.0);double intYears = Math.Floor(intDays / 365.0);Response.Write("Số ngày : " + intDays.ToString());Response.Write("Số tháng : " + intMonths.ToString());Response.Write("Số năm : " + intYears.ToString());

5. Thêm điều kiểm xác nhận xóa/sửa trong gridview

Trong gridview nếu bạn muốn có thêm cột cho phép người dùng chọn bản ghi để xóa, Bạn có thể thêm cột và convert thành TemplateField và khi người dùng click chọn xóa bạn có yêu cầu xác nhận thao tác xóa này. Bạn xem minh họa sau

<asp:TemplateField HeaderText="Xóa"> <ItemTemplate> <asp:LinkButton ID="lbtDelete" runat="server" OnClientClick="return confirm('Bạn có chắc chắn xóa không?')" onclick="lbtDelete_Click"><img src="Images/Xoa.jpg" border="0" /></asp:LinkButton> </ItemTemplate></asp:TemplateField>

Page 3: Tổng hợp các thủ thuật lập trình aspnet

Hoặc bạn cũng có thể code bằng C# trong hàm RowDataBound của gridview như sau:

if (e.Row.RowType == DataControlRowType.DataRow){ if (e.Row.Cells[1].HasControls()) { LinkButton lbtDelete= ((LinkButton)e.Row.Cells[1].Controls[0]); lbtDelete.Attributes.Add("onclick", "return confirm('Bạn có chắc chắn xóa không?');"); }} //Chú ý là Cell bắt đầu từ 0. //if (e.Row.Cells[1].HasControls()) Sẽ kiểm tra Cells[1] có tồn tại hay không

6. Sử dụng nhiều Web.Config trong ứng dụng Asp.Net

Nếu bạn muốn sử dụng nhiều file web.config trong ứng dụng của bạn (Minh họa rất rõ nếu bạn đã cài Forum yetanotherforum    Bạn sẽ thấy các thông số được lưu ở file db.config, app.config, ...). Ví dụ bạn muốn lưu riêng các thông số kết nối Database, các thông số về cấu hình ứng dụng, ... ra một file web.config. Bạn tham khảo ví dụ sau:

- Tạo file condb.config nội dung như sau:

<appSettings> <add key="TestConnect" value="data source=.\SQL2005;initial catalog=MyDatabase;User ID=sa; Password=***"/> </appSettings>

- Trong file web.config tại thẻ appSettings bạn trỏ đến file condb.config như sau:

<appSettings> <appSettings file="condb.config">

</appSettings>

Giờ bạn muốn lấy các thông số kết nối này bạn in thử giá trị của nó như sau:

Response.Write(ConfigurationManager.AppSettings.Get("TestConnect"));

Tương tự như vậy bạn có thể tạo các file *.config khác để lưu các thông số cấu hình ứng dụng khác

7. Bắt sự kiện phím Enter.

Giả sử bạn có Form tìm kiếm và bạn muốn khi nhập dữ liệu ở Textbox và nhấn phím Enter thì sự kiện onclick lên nút Button được thực hiện bạn viết hàm javascript như sau:

<script language="javascript"> function doClick(buttonName, e) {

Page 4: Tổng hợp các thủ thuật lập trình aspnet

var key; if (window.event) key = window.event.keyCode; //IE else key = e.which; //firefox if (key == 13) { var btn = document.getElementById(buttonName); if (btn != null) { btn.click(); event.keyCode = 0 } } }</script>

Trong code C# bạn muốn khi bạn nhấn Enter tác dụng với control nào bạn dùng như ví dụ sau:

txtTuKhoa.Attributes.Add("onKeyPress", "doClick('" + btnTim.ClientID + "',event)");

8. Viết hàm ShowMessage đưa ra thông điệp bạn muốn

Tham khảo hàm sau:

void ShowMessage(string mTextMsg, string mControlFocus){ System.Text.StringBuilder sb = new System.Text.StringBuilder(""); sb.Append("<script language=\"JavaScript\">"); if (mTextMsg != "") sb.Append(" alert('" + mTextMsg + "');"); if (mControlFocus != "") sb.Append("document.forms[0].item('" + mControlFocus + "').focus();"); sb.Append("</script>"); if (!IsStartupScriptRegistered("setFocus")) RegisterStartupScript("setFocus", sb.ToString());}

Sử dụng hàm này: Giả sử bạn có một Button bạn viết như sau

protected void Button1_Click(object sender, EventArgs e){ ShowMessage("Thông điệp của bạn!", "Button1"); return;}

9. Thêm cột tự tăng trong Grid.Trong Gridview nếu bạn muốn có thêm cột số thứ tự bạn Add thêm TemplateField như sau vào Grid nhé

<asp:TemplateField HeaderText="STT"> <ItemTemplate> <%# Container.DataItemIndex + 1 %>

Page 5: Tổng hợp các thủ thuật lập trình aspnet

</ItemTemplate> </asp:TemplateField>

10. Chuyển hướng sang trang khác sau khi click OK từ MessageBox

Giả sử bạn muốn alert một thông điệp nào đó và sau khi người dùng nhấn OK thì trang hiện hành được điều hướng sang trang khác. Bạn tham khảo code sau

string strScript = "<script>"; strScript += "alert('Thông điệp của bạn');"; strScript += "window.location='NextPage.aspx';"; strScript += "</script>"; Page.RegisterClientScriptBlock("strScript", strScript);

Một cách khác bạn có thể dùng

ScriptManager.RegisterStartupScript( this, this.GetType(), "alert", "alert('Thông điệp của bạn');location.href='NextPage.aspx';", true);

11. Tổng hợp nhiều file js trong một file duy nhất

Thông thường trang web của bạn sẽ sử dụng nhiều file javascript ví dụ như:

<script src="Tooltip/System_Tooltip.js" type="text/javascript"></script><script src="js/jquery-1.4.2.js" type="text/javascript"></script><script src="movies/swfobject.js" type="text/javascript"></script> <script src="js/jquery-ui.min.js" type="text/javascript"></script>

Thay vì trong code ta gọi quá nhiều file JS ta sẽ tạo 1 file duy nhất totalScript.js chẳng hạn nội dung file này sẽ là

document.write('<script type="text/javascript" src="Tooltip/System_Tooltip.js"></script>');document.write('<script type="text/javascript" src="js/jquery-1.4.2.js"></script>');document.write('<script type="text/javascript" src="movies/swfobject.js"></script>');document.write('<script type="text/javascript" src="js/jquery-ui.min.js"></script>');

Như vậy trong code bạn sẽ không phải khai báo quá nhiều javascript nữa mà chỉ cần 1 là đủ

<script src="totalScript.js" type="text/javascript"></script>

12. Khai báo các namespaces trong web.config

Thông thường khi ta tạo một trang mới với code behind thì chúng ta vẫn dùng các khai báo như

Page 6: Tổng hợp các thủ thuật lập trình aspnet

using System;using System.Data;using System.Configuration;using System.Collections;

Giả sử ta dùng DataTable mà lại quên khai báo using System.Data; thì khi chạy sẽ báo lỗi. Vậy ta tránh trường hợp đó bằng cách khai báo các namespaces trong web.config:

<namespaces><clear/><add namespace="System"/><add namespace="System.Collections"/><add namespace="System.Collections.Specialized"/><add namespace="System.Configuration"/><add namespace="System.Text"/><add namespace="System.Text.RegularExpressions"/><add namespace="System.Web"/><add namespace="System.Web.Caching"/><add namespace="System.Web.SessionState"/><add namespace="System.Web.Security"/><add namespace="System.Web.Profile"/><add namespace="System.Web.UI"/><add namespace="System.Web.UI.WebControls"/><add namespace="System.Web.UI.WebControls.WebParts"/><add namespace="System.Web.UI.HtmlControls"/>

</namespaces>

13: Nhân phím TAB 2 lân liên tiếp để hiện nhanh câu lệnh

Ví dụ bạn dùng câu lệnh IF:

Trong chế độ dong lệnh, bạn gõ if sau đó NHÂN PHIM TAB 2 LÂN thì câu lệnh IF sẽ xuất hiện như sau:

if (true) { }

Lúc này, con trỏ chuột sẽ ở vị trí của chữ true, bạn chỉ cần gõ điều kiện của câu lệnh IF.

Tác dụng:- Làm theo cách trên bạn sẽ rút ngăn được thời gian gõ câu lệnh- Không rơi vào tình trạng thiếu dấu đóng hoặc mở câu lệnh {}

Ap dụng với các câu lệnh khác:- FOR: bạn gõ chữ FOR rôi NHÂN PHIM TAB 2 LÂN bạn sẽ có kết quả như sau:

for (int i = 0; i < length; i++){ }

Page 7: Tổng hợp các thủ thuật lập trình aspnet

- Ap dụng tương tự với các câu lệnh khác như: switch, foreach, while, do while, ... bạn sẽ cảm thấy rất thoải mái khi gõ các câu lệnh trong Visual Studio.

14. Đưa các thông tin tĩnh vào file xml.

Khi làm website có những phần thông tin tĩnh rất ít khi thay đổi như ảnh banner, copy right, địa chỉ liên hệ, ... nếu các thông tin này bạn đưa luôn vào code aspx thì khi có sự thay đổi bạn lại phải sửa lại code, Nếu đưa vào Database thì ta sẽ sử dụng connect tới Database server nhiều. Vậy có cách khác là các thông tin này bạn đưa vào file xml và trong code bạn viết để hiển thị chúng. Khi có thay đổi ta cập nhật lại file xml là xong. Như bài hướng dẫn sau: Asp.net Đưa các thông tin tĩnh vào file xml (Vì minh họa sẽ hơi dài nên tôi viết thành bài hướng dẫn riêng)

15. Ngăn chặn duplicate insert khi refresh trang

Vấn đề thường hay gặp khi thêm dữ liệu là bị duplicate insert khi trang web refresh. Nó xảy ra khi 1 trang refresh sau khi câu lệnh insert  được thực thi.

Giải pháp đơn giản nhất để giải quyết vấn đề này là redirect sau khi người dùng insert. Bạn tham khảo code demo sau khi insert sẽ redirect đến chính nó

private void InsertData(){ string strQuery = "INSERT INTO TB_TacGia (MaTacGia, TenTacGia) values(@MaTacGia, @TenTacGia)"; SqlCommand cmd = new SqlCommand(strQuery); cmd.Parameters.AddWithValue("@MaTacGia", "AnhKhoa"); cmd.Parameters.AddWithValue("@TenTacGia", "Bùi Anh Khoa"); InsertUpdateData(cmd); Response.Redirect(Request.Url.AbsoluteUri);}

16. Giới hạn độ dài của Textbox trong khoảng [a,b]

Giả sử bạn muốn giới hạn độ dài Textbox mật khẩu trong khoảng [a,b] bạn có thể dùng CustomValidator như minh họa sau:

Page 8: Tổng hợp các thủ thuật lập trình aspnet

<asp:TextBox runat="server" ID="txtTest"></asp:TextBox><asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Độ dài phải trong khoảng [6,20]" ControlToValidate="txtTest" OnServerValidate="CustomValidator1_ServerValidate"> </asp:CustomValidator>

Viết sự kiện  CustomValidator1_ServerValidate

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args){ if (args.Value.Length = 20) args.IsValid = false; else { if (args.Value.Length < 6) args.IsValid= false; else args.IsValid = true; }}

17. Nhúng trạng thái Online/Offline của yahoo.

Trên web của bạn muốn hiển thị trạng thái Online/Offline của yahoo tại nơi muốn báo cho người dùng biết yahoo hỗ trợ trực tuyến. Bạn dùng đoạn mã như sau:

<a href="ymsgr:sendIM?yahooid"> <img src="http://opi.yahoo.com/online?u=yahooid&m=g&t=2" border="0" width="125" height="25" /></a>

 Khi yahoo có id là yahooid Online thì hình ảnh Online của yahoo được hiển thị, tương tự là trạng thái Offline. Bạn thay yahooid bằng id của bạn nhé

18. Ngăn không cho người khác copy hay nhân phải chuột trên trang web.Khi cần không cho người khác bôi đen hoặc nhấn phải chuột trên trang web hay ứng dụng của bạn bạn hãy sửa lại thẻ <Body> như sau:

 

<body oncontextmenu="return false;" onpaste="return false;" onselectstart="return false;">

Bạn con có thể ứng dụng trong trường hợp bạn viết form đăng ký thành viên thường có trường Email và có yêu cầu người dùng xác nhận Email chính xác với Email đã nhập. Trường Xác nhận Email bạn cần ngăn không cho người dùng chọn ô Email và copy (Như thế chưa đúng nguyên tăc). Bạn sửa lại thuộc tính trong TextBox như minh họa sau

<asp:TextBox ID="TextBox1" runat="server"

Page 9: Tổng hợp các thủ thuật lập trình aspnet

oncontextmenu="return false;" onkeypress="return onPaste(event)" onpaste="return false;" ></asp:TextBox>

19. Tạo Ico cho địa chỉ website.

Các trang web khi bạn truy cập hay có icon là biểu tượng của trang web đó. bạn sẽ thấy trên thanh address trước chữ http sẽ có biểu tượng của website. Để thực hiện bạn thêm mã html như sau vào trong thẻ head:

<link href="http://hmweb.com.vn/hmico.ico" rel="shortcut icon" type="image/x-icon" />

20. hiệu ứng chuyển trang bằng thẻ meta. Khi người dùng đang xem trang web của bạn, họ chuyển qua trang web khác, bạn có thể dùng thẻ Mata như sau để tạo hiệu ứng chuyển trang như một lời chào thân thiện

<meta http-equiv="Site-Exit" content="revealTrans(Duration=3.0,Transition=23)"/>

Hoặc khi họ mở liên kết trên cùng trang của bạn, bạn cũng có thể tạo hiệu ứng chuyển trang đơn giản bằng cách dùng thẻ meta như sau

<META http-equiv="Page-Exit" content="progid:DXImageTransform.Microsoft.GradientWipe(duration=.5)">

21: Hiển thị chính xác nội dung văn bản TextArea

Khi bạn nhập nội dung văn bản trong TextArea thường mất các ký tự khoảng trăng hoặc ký tự xuống dong. Nếu bạn muốn giữ đúng định dạng đã nhập trong TextArea bạn thực hiện thay thế các ký tự đó như ví dụ

Label1.Text = TextBox1.Text.Replace("\n", "<br />").Replace(" ", "&nbsp;");

22. Sử dụng ViewState đúng chỗ

Khi lập trình web với asp.net sử  dụng các control, khi bạn view source sẽ thấy như minh họa

<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAgKK7LjKBwKM54rGBgzCWqbCIzq33uVXHF19FzfdGPsJ" />

Nếu bạn sử dụng càng nhiều control thì value càng lớn. điều này sẽ làm ảnh hưởng đến tốc độ, băng thông cũng như các cỗ máy tìm kiếm (Các máy tìm kiếm tìm kiếm tốt nhất cho khoảng 20KB source đầu tiên trên trang của bạn, quá số này thường sẽ bị bỏ qua - Tham khảo ASP.NET SEO around VIEWSTATE). Vì vậy nếu là lập trình website bạn nên bỏ ViewState bằng cách

Trong web.config

Page 10: Tổng hợp các thủ thuật lập trình aspnet

<pages enableViewStateMac='false'/>

Hoặc trong từng trang:

<%@ Master Language="C#" EnableViewState ="false"

Hoặc với từng control bạn cũng có thể bỏ ViewState

<asp:Button ID="BT1" EnableViewState="false" runat="server" />

Nhưng bạn chú ý 1 điều là khi bạn bỏ ViewState thì các sự kiện postback sẽ không có đúng hiệu lực của nó, chính vì vậy bạn cân nhăc ở trang nào nên dùng ViewState, trang nào không nên dùng ViewState.

23. Cách dùng khác của mệnh đề if ... else

Thông thường hoặc theo thói quen bạn hay dùng mệnh đề if ... else như sau:

private string abc(int gio){ string str = ""; if (gio < 12) { str = "Chào buổi sáng"; } else { str = "Chào buổi chiều"; } return str;}

Với dạng if ... else đơn giản bạn có thể dùng theo cấu trúc khác như sau (dễ và gọn hơn nhiều)

private string abc(int gio){ string str = ""; str = (gio < 12) ? "Chào buổi sáng" : "Chào buổi chiều"; return str;

31. Refresh lại trang gốc khi kết thúc thao tác ở trang popup

Khi bạn cần thực hiện hành động như thao tác dữ liệu hay cần làm một tác vụ nào đó và cần mở cửa số dạng popup và sau khi thực hiện xong công việc ở cửa số popup này bạn muốn refresh lại trang gốc. Ví dụ rõ nhất là ở diễn đàn aspvn.net (Khi bạn trả lời hoặc đặt câu hỏi aspvn.net sẽ mở cửa sổ popup để bạn nhập nội dung và lưu lại thì trang gốc được refresh lại) bạn thực hiện như sau:

Page 11: Tổng hợp các thủ thuật lập trình aspnet

Ở trang popup bạn cần có đoạn javascript như sau:

<script language="JavaScript"> function refreshParent() { window.opener.location.href = window.opener.location.href; if (window.opener.progressWindow) { window.opener.progressWindow.close() } window.close(); } </script>

Trong code C# khi thực hiện lưu dữ liệu xong bạn dùng như dong lệnh sau:

ScriptManager.RegisterStartupScript(this, this.GetType(), "refresh", "refreshParent();", true);

Nếu dùng code html trong trang popup bạn dùng như ví dụ:

<asp:Button ID="btnClose" runat="server" OnClientClick="refreshParent();" Text="Đóng" />

32. Chèn thông tin chỉ số Alexa vào trang web

Khi lướt web bạn thấy có một số trang hiển thị chỉ số Alexa Traffic Rank như hmweb cũng đang dùng ở cuối trang. Làm điều này rất đơn giản bạn chỉ cần chèn đoạn code sau vào nơi bạn muốn hiển thị là xong:

<a href="http://www.alexa.com/siteinfo/hmweb.com.vn"><script type='text/javascript' language='javascript' src='http://xslt.alexa.com/site_stats/js/t/a?url=hmweb.com.vn'></script></a>

33. Sử dụng MaskedEditExtender của ajax để thực hiện ghi đè dữ liệu.

Bạn có textbox ví dụ để nhập ngày tháng, bạn muốn khi nhập số thì dữ liệu được nhập kiểu overwrite bạn dùng MaskedEditExtender của ajax như sau:

<asp:TextBox ID="TextBox1" runat="server" Width="80px" /><cc1:MaskedEditExtender ID="meeTuNgay" MaskType="Date" Mask="99/99/9999" runat="server" TargetControlID="txtTuNgay" />

Copy đoạn code này vào trang aspx của bạn và kiểm chứng (Chú ý bạn cần đảm bảo đã khai báo sử dụng ajax AjaxControlToolkit)

34. Câu hình tiếng việt cho Ajax CalendarExtender

Bạn sử dụng Ajax CalendarExtender với dữ liệu ngày tháng và muốn cấu hình tiếng việt cho nó bạn làm như ví dụ sau: (DEMO)

Page 12: Tổng hợp các thủ thuật lập trình aspnet

<%@ Page Language="C#" Culture="vi-VN" uiCulture="vi"%><%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"></head><body> <form id="form1" runat="server"> <cc1:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" EnableScriptGlobalization="True" /> <div> Nhập ngày tháng: <asp:TextBox ID="txtNgayThang" runat="server" CausesValidation="True"></asp:TextBox> <cc1:CalendarExtender ID="txtNgayThang_CalendarExtender" runat="server" Enabled="True" TargetControlID="txtNgayThang" Format="dd/MM/yyyy"> </cc1:CalendarExtender> </div> </form></body></html>

35. SetFocus Textbox theo điều kiện

Bạn có Form login và khi người dùng truy cập bạn muốn đặt focus luôn đến txtUserName (Tên đăng nhập), Nếu txtUserName đã có (Thường do trình duyệt có chế độ nhớ UserName) thì chuyển focus đến txtPassword. Điều này bạn thấy rõ nhất nếu bạn sử dụng mail của MDaemon bạn làm như sau

protected void Page_Load(object sender, EventArgs e){ if (txtUserName.Text + "" != "") { this.SetFocus(txtPassword); } else { this.SetFocus(txtUserName); }}

36. Cho phep upload hay export khi dùng updatepanel

Khi sử dụng updatePanel của ajax nếu bạn lông asp:FileUpload hay button cho phéo export ra excel chẳng hạn trong một asp:UpdatePanel thì sẽ không upload hay export được, Nguyên nhân thì chưa rõ nhưng cũng có cách khăc phục bằng cách thêm asp:PostBackTrigger bên trong thẻ UpdatePanel như sau:

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> Chọn dữ liệu: <asp:FileUpload ID="filMyFile" runat="server" CssClass="textbox" Width="300px" /> <asp:Button ID="btnImport" runat="server"

Page 13: Tổng hợp các thủ thuật lập trình aspnet

OnClick="btnImport_Click" OnClientClick="javascript:showWait();" Text="Import" /> </ContentTemplate> <Triggers> <asp:PostBackTrigger ControlID="btnImport" /> </Triggers></asp:UpdatePanel>

 

37. Sử dụng asp:UpdateProgress của ajax kết hợp với updatepanel

Trong mục 36 có cái OnClientClick="javascript:showWait();" tức là khi người dùng chọn dữ liệu upload và click upload ta sẽ thông báo đang xử lý dữ liệu, để làm vậy ta cần dùng một UpdateProgress cùng với một updatepanel như sau:

<asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1" DynamicLayout="true"> <ProgressTemplate> Đang xử lý dữ liệu ... </ProgressTemplate></asp:UpdateProgress>

Và hàm showWait:

<script language="javascript" type="text/javascript"> function showWait() { if ($get('filMyFile').value.length > 0) { $get('UpdateProgress1').style.display = 'block'; } }</script>

Bạn có thể tìm một ảnh gif động và style sheet để làm nổi cái UpdateProgress thông báo cho sinh động

38. Thiết lập Title page theo bài viết

Khi người dùng đọc một bài viết thì Title page sẽ chính là tiêu để của bài viết đó, thiết lập này sẽ có tác dụng cho các máy tìm kiếm tốt hơn. Để thiết lập khi bạn đã truy vấn được ID của bài viết bạn dùng Page.Title như minh họa sau:

Page.Title = dtb.Rows[0]["Title"] + "";

Trong đó dtb là Datatable khi truy vấn dữ liệu với IdBaiViet và Fill vào dtb

39. Định dạng số phân cách hàng nghìn

Page 14: Tổng hợp các thủ thuật lập trình aspnet

Bạn có một số 123456789 chẳng hạn giờ muốn định dạng hiển thị phân cách hàng nghìn để hiển thị thành 123,456,789 bạn làm như ví dụ sau:

int so = 123456789;txtSo.Text = so.ToString("#,###");

Tương tự cách dùng ToString bạn cũng có thể định dạng ngày tháng hiển thị dạng dd/MM/yyyy như sau: txtSo.Text = DateTime.Now.ToString("dd/MM/yyyy");

40. Hiển thị thời gian chạy kiểu đồng hồ điện tử

Bạn muốn có label hiển thị như đông hô điện từ trên trang của bạn bạn dùng như sau:

<script language="JavaScript"> function updateTime() { var label = document.getElementById('ctl00_currentTime'); if (label) { var time = (new Date()).localeFormat("T"); label.innerHTML = time + '&nbsp;&nbsp;&nbsp;'; } } updateTime(); window.setInterval(updateTime, 1000);</script> ......<asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <span id="currentTime" runat="server"></span> </ContentTemplate></asp:UpdatePanel>

Bạn chú ý trong hàm javascript trên ta có dùng ctl00_currentTime là ID của thẻ span - ctl00_ là chỉ số tự sinh khi bạn đặt trong updatepanel, Nếu bạn thực hiện không chạy bạn view source tìm và lấy đúng id của thẻ span (Vì có thể bạn dùng lông trong nhiều control thì id này sẽ khác)

Con tiếp - Tiếp theo sẽ là phần 5 với 10 thủ thuật khác nữa