Tin tức

Thủ thuật cực hay trong lập trình ASP.NET

23/10/2013

Sau đây, chúng tôi sẽ giới thiệu tới các bạn một số thủ thuật thường được ứng dụng nhất trong lập trình ASP.NET:
1. 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. Bạn tham khảo ví dụ sau:

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

<appSettings>

<addkey="TestConnect" value="data source=.\SQL2005;initialcatalog=MyDatabase;User ID=sa; Password=***"/>

</appSettings>

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

<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


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à 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 convertthành TemplateField bạn dùng như minh họa sau:

<asp:HyperLinkID="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="ViewData" />

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

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

<asp:TextBoxID="txtCMT" Width="50px" runat="server" />

<cc1:FilteredTextBoxExtenderID="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:

functiononlyNumbers(evt) {

    var e = event || evt;

    var charCode = e.which || e.keyCode;

    if (charCode > 31 && (charCode< 48 || charCode > 57))

     return false;

    return true;

}

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

<asp:TextBoxID="txtCMT" runat="server" onkeypress="returnonlyNumbers();" />

4. 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 muốn giới hạn chỉ cho upload file ảnh thôi thì sử dụng RegularExpressionValidator như minh họa sau:

<asp:FileUploadID="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>

5. Tính số ngày, tháng,năm giữa hai mốc thời gian

Xem ví dụ dưới đây:

DateTimedate1 = Convert.ToDateTime("2008/01/01");

DateTimedate2 = Convert.ToDateTime("2010/12/31");

TimeSpantimespan = date2.Subtract(date1);

intintDays = timespan.Days;

doubleintMonths = Math.Floor(intDays / 30.0);

doubleintYears = 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());

6. Thê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:TemplateFieldHeaderText="Xóa">

    <ItemTemplate>

        <asp:LinkButtonID="lbtDelete" runat="server"

            OnClientClick="returnconfirm('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>

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ạncó 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

7. 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:

<asp:TemplateFieldHeaderText="STT">    

     <ItemTemplate>    

         <%# Container.DataItemIndex + 1%>    

      </ItemTemplate>    

 </asp:TemplateField> 

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

Nếu 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:

stringstrScript = "<script>";

strScript+= "alert('Thông điệp của bạn');";

strScript+= "window.location='NextPage.aspx';";

strScript+= "</script>";

Page.RegisterClientScriptBlock("strScript",strScript);

9. 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 các 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:

Ở 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ư dòng 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" />

10. 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ố AlexaTraffic 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>

http://www.myskills.vn/