You are on page 1of 14

Tng hp cc th thut lp trnh asp.

net - Phn 1 Ngy ng: 12/12/2010 Lt xem:1692 ng bi: admin Trong bi vit ny ti s tm li v tng hp cc th thut khi lp trnh vi asp.net. C th n s gim bt cng sc khi bn lp trnh. Ti s chia lm nhiu phn, mi phn ti s post 10 th thut hy vong s gip ch cho cc bn th thut, lp trnh, th thut lp trnh, asp.net, 1. Kim tra FileUpload ch c th l file nh ti ln hnh nh n my ch t mt ng dng web Asp.Net, Bn s dng FileUpload. Nhng bn ch mun gii hn ch cho upload file nh thi => S dng RegularExpressionValidator nh minh ha di y
<asp:FileUpload ID="FileUpload1" runat="server" /> <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="FileUpload1" ErrorMessage="Khng phi file nh" ValidationExpression= "^([0-9a-zA-Z_\-~ :\\])+(.jpg|.JPG|.jpeg|.JPEG|.bmp|.BMP|.gif|.GIF|.png|.PNG)$"> </asp:RegularExpressionValidator>

2. To nhiu QueryString t Hyperlink NavigateUrl trong GridView Trong Gridview khi bn mun mt trng no l lin kt v bn mun truyn cc QueryString hoc Parameter trang chuyn tip bn c th Request c cc Parameter ny. - Nu l trng c convert thnh TemplateField bn dng nh minh ha 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>

- Nu l HyperLinkField
<asp:HyperLinkField DataNavigateUrlFields="Field1,Field2,Field3" DataNavigateUrlFormatString="TestPage.aspx?param1={0}&param2={1}&param3={2}" Text="View Data" />
Hy thay cc Field1, Field2, ... Thnh cc tn trng d liu ca bn

3. Gii hn ch nhp s trong Textbox

gii hn khi ngi dng ch c th nhp k t s (s chng minh th chng hn) trong textbox bn c th dng FilteredTextBoxExtender ca AjaxControl toolkit nh sau:
<asp:TextBox ID="txtCMT" Width="50px" runat="server" /> <cc1:FilteredTextBoxExtender ID="ftbeCMT" runat="server" Enabled="True" FilterType="Numbers" TargetControlID="txtCMT" />

Nu khng dng ajax bn cn vit hm 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 bn sa li thnh:


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

4. Tnh s ngy, thng, nm gia hai mc thi gian Tham kho 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 ngy : " + intDays.ToString()); Response.Write("S thng : " + intMonths.ToString()); Response.Write("S nm : " + intYears.ToString());

5. Thm iu kim xc nhn xa/sa trong gridview Trong gridview nu bn mun c thm ct cho php ngi dng chn bn ghi xa, Bn c th thm ct v convert thnh TemplateField v khi ngi dng click chn xa bn c yu cu xc nhn thao tc xa ny. Bn xem minh ha sau
<asp:TemplateField HeaderText="Xa"> <ItemTemplate> <asp:LinkButton ID="lbtDelete" runat="server" OnClientClick="return confirm('Bn c chc chn xa khng?')" onclick="lbtDelete_Click"><img src="Images/Xoa.jpg" border="0" /></asp:LinkButton> </ItemTemplate> </asp:TemplateField>

Hoc bn cng c th code bng C# trong hm RowDataBound ca 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('Bn c chc chn xa khng?');"); } } //Ch l Cell bt u t 0. //if (e.Row.Cells[1].HasControls()) S kim tra Cells[1] c tn ti hay khng

6. S dng nhiu Web.Config trong ng dng Asp.Net Nu bn mun s dng nhiu file web.config trong ng dng ca bn (Minh ha rt r nu bn ci Forum yetanotherforum Bn s thy cc thng s c lu file db.config, app.config, ...). V d bn mun lu ring cc thng s kt ni Database, cc thng s v cu hnh ng dng, ... ra mt file web.config. Bn tham kho v d sau: - To file condb.config ni dung nh sau:
<appSettings> <add key="TestConnect" value="data source=.\SQL2005;initial catalog=MyDatabase;User ID=sa; Password=***"/> </appSettings>

- Trong file web.config ti th appSettings bn tr n file condb.config nh sau:


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

Gi bn mun ly cc thng s kt ni ny bn in th gi tr ca n nh sau:


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

Tng t nh vy bn c th to cc file *.config khc lu cc thng s cu hnh ng dng khc 7. Bt s kin phm Enter. Gi s bn c Form tm kim v bn mun khi nhp d liu Textbox v nhn phm Enter th s kin onclick ln nt Button c thc hin bn vit hm javascript nh sau:
<script language="javascript"> function doClick(buttonName, e) {

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# bn mun khi bn nhn Enter tc dng vi control no bn dng nh v d sau:
txtTuKhoa.Attributes.Add("onKeyPress", "doClick('" + btnTim.ClientID + "',event)");

8. Vit hm ShowMessage a ra thng ip bn mun Tham kho hm 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 dng hm ny: Gi s bn c mt Button bn vit nh sau


protected void Button1_Click(object sender, EventArgs e) { ShowMessage("Thng ip ca bn!", "Button1"); return; }

9. Thm ct t tng trong Grid. Trong Gridview nu bn mun c thm ct s th t bn Add thm TemplateField nh sau vo Grid nh
<asp:TemplateField HeaderText="STT"> <ItemTemplate> <%# Container.DataItemIndex + 1 %>

</ItemTemplate> </asp:TemplateField>

10. Chuyn hng sang trang khc sau khi click OK t MessageBox Gi s bn mun alert mt thng ip no v sau khi ngi dng nhn OK th trang hin hnh c iu hng sang trang khc. Bn tham kho code sau
string strScript = "<script>"; strScript += "alert('Thng ip ca bn');"; strScript += "window.location='NextPage.aspx';"; strScript += "</script>"; Page.RegisterClientScriptBlock("strScript", strScript);

Mt cch khc bn c th dng


ScriptManager.RegisterStartupScript( this, this.GetType(), "alert", "alert('Thng ip ca bn');location.href='NextPage.aspx';", true);

11. Tng hp nhiu file js trong mt file duy nht Thng thng trang web ca bn s s dng nhiu file javascript v d nh:
<script <script <script <script src="Tooltip/System_Tooltip.js" type="text/javascript"></script> src="js/jquery-1.4.2.js" type="text/javascript"></script> src="movies/swfobject.js" type="text/javascript"></script> src="js/jquery-ui.min.js" type="text/javascript"></script>

Thay v trong code ta gi qu nhiu file JS ta s to 1 file duy nht totalScript.js chng hn ni dung file ny s l
document.write('<script type="text/javascript" src="Tooltip/System_Tooltip.js"></script>'); document.write('<script type="text/javascript" src="js/jquery1.4.2.js"></script>'); document.write('<script type="text/javascript" src="movies/swfobject.js"></script>'); document.write('<script type="text/javascript" src="js/jqueryui.min.js"></script>');

Nh vy trong code bn s khng phi khai bo qu nhiu javascript na m ch cn 1 l


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

12. Khai bo cc namespaces trong web.config Thng thng khi ta to mt trang mi vi code behind th chng ta vn dng cc khai bo nh
using System;

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

Gi s ta dng DataTable m li qun khai bo using System.Data; th khi chy s bo li. Vy ta trnh trng hp bng cch khai bo cc 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 phm TAB 2 l n lin tip hin nhanh c u lnh V d bn dng cu lnh IF: Trong ch d ng lnh, bn g if sau NH N PH M TAB 2 L N th cu lnh IF s xut hin nh sau:
if (true) { }

Lc ny, con tr chut s v tr ca ch true, bn ch cn g iu kin ca cu lnh IF. Tc dng: - Lm theo cch trn bn s rt ng n c thi gian g cu lnh - Khng ri vo tnh trng thiu du ng hoc m cu lnh p dng vi cc cu lnh khc: - FOR: bn g ch FOR r i NH N PH M TAB 2 L N bn s c kt qu nh sau:
for (int i = 0; i < length; i++) { }

- p dng tng t vi cc cu lnh khc nh: switch, foreach, while, do while, ... bn s cm thy rt thoi mi khi g cc cu lnh trong Visual Studio. 14. a cc thng tin tnh vo file xml. Khi lm website c nhng phn thng tin tnh rt t khi thay i nh nh banner, copy right, a ch lin h, ... nu cc thng tin ny bn a lun vo code aspx th khi c s thay i bn li phi sa li code, Nu a vo Database th ta s s dng connect ti Database server nhiu. Vy c cch khc l cc thng tin ny bn a vo file xml v trong code bn vit hin th chng. Khi c thay i ta cp nht li file xml l xong. Nh bi hng dn sau: Asp.net a cc thng tin tnh vo file xml (V minh ha s hi di nn ti vit thnh bi hng dn ring) 15. Ngn chn duplicate insert khi refresh trang Vn thng hay gp khi thm d liu l b duplicate insert khi trang web refresh. N xy ra khi 1 trang refresh sau khi cu lnh insert c thc thi.

Gii php n gin nht gii quyt vn ny l redirect sau khi ngi dng insert. Bn tham kho code demo sau khi insert s redirect n chnh 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", "Bi Anh Khoa"); InsertUpdateData(cmd); Response.Redirect(Request.Url.AbsoluteUri); }

16. Gii hn di ca Textbox trong khong [a,b] Gi s bn mun gii hn di Textbox mt khu trong khong [a,b] bn c th dng CustomValidator nh minh ha sau:

<asp:TextBox runat="server" ID="txtTest"></asp:TextBox> <asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage=" di phi trong khong [6,20]" ControlToValidate="txtTest" OnServerValidate="CustomValidator1_ServerValidate"> </asp:CustomValidator>

Vit s kin 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. Nhng trng thi Online/Offline ca yahoo. Trn web ca bn mun hin th trng thi Online/Offline ca yahoo ti ni mun bo cho ngi dng bit yahoo h tr trc tuyn. Bn dng on 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 hnh nh Online ca yahoo c hin th, tng t l trng thi Offline. Bn thay yahooid bng id ca bn nh 18. Ngn khng cho ngi khc copy hay nh n phi chut trn trang web. Khi cn khng cho ngi khc bi en hoc nhn phi chut trn trang web hay ng dng ca bn bn hy sa li th <Body> nh sau:

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

onpaste="return false;"

Bn c n c th ng dng trong trng hp bn vit form ng k thnh vin thng c trng Email v c yu cu ngi dng xc nhn Email chnh xc vi Email nhp. Trng Xc nhn Email bn cn ngn khng cho ngi dng chn Email v copy (Nh th cha ng nguyn t c). Bn sa li thuc tnh trong TextBox nh minh ha sau
<asp:TextBox ID="TextBox1" runat="server"

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

19. To Ico cho a ch website. Cc trang web khi bn truy cp hay c icon l biu tng ca trang web . bn s thy trn thanh address trc ch http s c biu tng ca website. thc hin bn thm m html nh sau vo trong th head:
<link href="http://hmweb.com.vn/hmico.ico" rel="shortcut icon" type="image/xicon" />

20. hiu ng chuyn trang bng th meta. Khi ngi dng ang xem trang web ca bn, h chuyn qua trang web khc, bn c th dng th Mata nh sau to hiu ng chuyn trang nh mt li cho thn thin
<meta http-equiv="Site-Exit" content="revealTrans(Duration=3.0,Transition=23)"/>

Hoc khi h m lin kt trn cng trang ca bn, bn cng c th to hiu ng chuyn trang n gin bng cch dng th meta nh sau
<META http-equiv="Page-Exit" content="progid:DXImageTransform.Microsoft.GradientWipe(duration=.5)">

21: Hin th chnh xc ni dung vn bn TextArea Khi bn nhp ni dung vn bn trong TextArea thng mt cc k t khong tr ng hoc k t xung d ng. Nu bn mun gi ng nh dng nhp trong TextArea bn thc hin thay th cc k t nh v d
Label1.Text = TextBox1.Text.Replace("\n", "<br />").Replace(" ", "&nbsp;");

22. S dng ViewState ng ch Khi lp trnh web vi asp.net s dng cc control, khi bn view source s thy nh minh ha
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAgKK7LjKBwKM54rGBgzCWqbCIzq33uVXHF19FzfdGPsJ" />

Nu bn s dng cng nhiu control th value cng ln. iu ny s lm nh hng n tc , bng thng cng nh cc c my tm kim (Cc my tm kim tm kim tt nht cho khong 20KB source u tin trn trang ca bn, qu s ny thng s b b qua - Tham kho ASP.NET SEO around VIEWSTATE). V vy nu l lp trnh website bn nn b ViewState bng cch Trong web.config

<pages enableViewStateMac='false'/>

Hoc trong tng trang:


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

Hoc vi tng control bn cng c th b ViewState


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

Nhng bn ch 1 iu l khi bn b ViewState th cc s kin postback s khng c ng hiu lc ca n, chnh v vy bn cn nh c trang no nn dng ViewState, trang no khng nn dng ViewState. 23. Cch dng khc ca mnh if ... else Thng thng hoc theo thi quen bn hay dng mnh if ... else nh sau:
private string abc(int gio) { string str = ""; if (gio < 12) { str = "Cho bui sng"; } else { str = "Cho bui chiu"; } return str; }

Vi dng if ... else n gin bn c th dng theo cu trc khc nh sau (d v gn hn nhiu)
private string abc(int gio) { string str = ""; str = (gio < 12) ? "Cho bui sng" : "Cho bui chiu"; return str;

31. Refresh li trang gc khi kt thc thao tc trang popup Khi bn cn thc hin hnh ng nh thao tc d liu hay cn lm mt tc v no v cn m ca s dng popup v sau khi thc hin xong cng vic ca s popup ny bn mun refresh li trang gc. V d r nht l din n aspvn.net (Khi bn tr li hoc t cu hi aspvn.net s m ca s popup bn nhp ni dung v lu li th trang gc c refresh li) bn thc hin nh sau:

trang popup bn cn c on 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 thc hin lu d liu xong bn dng nh d ng lnh sau:
ScriptManager.RegisterStartupScript(this, this.GetType(), "refresh", "refreshParent();", true);

Nu dng code html trong trang popup bn dng nh v d:


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

32. Chn thng tin ch s Alexa vo trang web Khi lt web bn thy c mt s trang hin th ch s Alexa Traffic Rank nh hmweb cng ang dng cui trang. Lm iu ny rt n gin bn ch cn chn on code sau vo ni bn mun hin 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 dng MaskedEditExtender ca ajax thc hin ghi d liu. Bn c textbox v d nhp ngy thng, bn mun khi nhp s th d liu c nhp kiu overwrite bn dng MaskedEditExtender ca 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 on code ny vo trang aspx ca bn v kim chng (Ch bn cn m bo khai bo s dng ajax AjaxControlToolkit) 34. C u hnh ting vit cho Ajax CalendarExtender Bn s dng Ajax CalendarExtender vi d liu ngy thng v mun cu hnh ting vit cho n bn lm nh v d sau: (DEMO)

<%@ 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> Nhp ngy thng: <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 iu kin Bn c Form login v khi ngi dng truy cp bn mun t focus lun n txtUserName (Tn ng nhp), Nu txtUserName c (Thng do trnh duyt c ch nh UserName) th chuyn focus n txtPassword. iu ny bn thy r nht nu bn s dng mail ca MDaemon bn lm 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 dng updatepanel Khi s dng updatePanel ca ajax nu bn l ng asp:FileUpload hay button cho pho export ra excel chng hn trong mt asp:UpdatePanel th s khng upload hay export c, Nguyn nhn th cha r nhng cng c cch kh c phc bng cch thm asp:PostBackTrigger bn trong th UpdatePanel nh sau:
<asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> Chn d liu: <asp:FileUpload ID="filMyFile" runat="server" CssClass="textbox" Width="300px" />

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

37. S dng asp:UpdateProgress ca ajax kt hp vi updatepanel Trong mc 36 c ci OnClientClick="javascript:showWait();" tc l khi ngi dng chn d liu upload v click upload ta s thng bo ang x l d liu, lm vy ta cn dng mt UpdateProgress cng vi mt updatepanel nh sau:
<asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1" DynamicLayout="true"> <ProgressTemplate> ang x l d liu ... </ProgressTemplate> </asp:UpdateProgress>

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

Bn c th tm mt nh gif ng v style sheet lm ni ci UpdateProgress thng bo cho sinh ng 38. Thit lp Title page theo bi vit Khi ngi dng c mt bi vit th Title page s chnh l tiu ca bi vit , thit lp ny s c tc dng cho cc my tm kim tt hn. thit lp khi bn truy vn c ID ca bi vit bn dng Page.Title nh minh ha sau:
Page.Title = dtb.Rows[0]["Title"] + "";

Trong dtb l Datatable khi truy vn d liu vi IdBaiViet v Fill vo dtb

39. nh dng s ph n cch hng nghn Bn c mt s 123456789 chng hn gi mun nh dng hin th phn cch hng nghn hin th thnh 123,456,789 bn lm nh v d sau:
int so = 123456789; txtSo.Text = so.ToString("#,###");

Tng t cch dng ToString bn cng c th nh dng ngy thng hin th dng dd/MM/yyyy nh sau: txtSo.Text = DateTime.Now.ToString("dd/MM/yyyy"); 40. Hin th thi gian chy kiu ng h in t Bn mun c label hin th nh ng h in t trn trang ca bn bn dng 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>

Bn ch trong hm javascript trn ta c dng ctl00_currentTime l ID ca th span - ctl00_ l ch s t sinh khi bn t trong updatepanel, Nu bn thc hin khng chy bn view source tm v ly ng id ca th span (V c th bn dng l ng trong nhiu control th id ny s khc) C n tip - Tip theo s l phn 5 vi 10 th thut khc na

You might also like