Hiển thị các bài đăng có nhãn ASP.NET MVC. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn ASP.NET MVC. Hiển thị tất cả bài đăng

Mã hóa và giải mã trong C#

Trong khi lập trình ứng dụng, ở các form đăng nhập, khi cần nhập mật khẩu, chúng ta thường phải truy xuất vào CSDL để lấy ra mật khẩu. Nhưng để bảo mật, mật khẩu này đã được mã hóa từ trước rồi. Để mã hóa được chuỗi mật khẩu, ta dùng hàm Encrypt sau:
public string Encrypt(string toEncrypt, bool useHashing)
        {
            byte[] keyArray;
            byte[] toEncryptArray = Encoding.UTF8.GetBytes(toEncrypt);
            if (useHashing)
            {
                var hashmd5 = new MD5CryptoServiceProvider();
                keyArray = hashmd5.ComputeHash(Encoding.UTF8.GetBytes("iloveit1208"));
            }
            else keyArray = Encoding.UTF8.GetBytes("iloveit1208");
            var tdes = new TripleDESCryptoServiceProvider
                           {
                               Key = keyArray,
                               Mode = CipherMode.ECB,
                               Padding = PaddingMode.PKCS7
                           };
            ICryptoTransform cTransform = tdes.CreateEncryptor();
            byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
            return Convert.ToBase64String(resultArray, 0, resultArray.Length);
        }

Để giải mã chuỗi đã được mã hóa, ta dùng hàm Decrypt sau:
public string Decrypt(string toDecrypt, bool useHashing)
        {
            byte[] keyArray;
            byte[] toEncryptArray = Convert.FromBase64String(toDecrypt);
            if (useHashing)
            {
                var hashmd5 = new MD5CryptoServiceProvider();
                keyArray = hashmd5.ComputeHash(Encoding.UTF8.GetBytes("iloveit1208"));
            }
            else keyArray = Encoding.UTF8.GetBytes("iloveit1208");
            var tdes = new TripleDESCryptoServiceProvider
                           {
                               Key = keyArray,
                               Mode = CipherMode.ECB,
                               Padding = PaddingMode.PKCS7
                           };
            ICryptoTransform cTransform = tdes.CreateDecryptor();
            byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
            return Encoding.UTF8.GetString(resultArray);
        }

Ví dụ cách sử dung:
string s=”Chao mung cac ban den boi blog cua iloveit1208”;
string mahoa=Encrypt(s,true);
string giaima=Decrypt(mahoa,true);
Chúc các bạn thành công!

Những phần mềm hỗ trợ hay dành cho Visual Studio

Là môi trường phát triển tích hợp mạnh mẽ và phổ biến nhất hiện nay, Visual Studio (VS) cung cấp cho các nhà phát triển những công cụ hết sức hữu ích trong việc xây dựng phần mềm. Tuy nhiên, Visual Studio không phải là hoàn hảo, nó không thể bao hết mọi "ngóc ngách" của việc lập trình. May mắn thay, các nhà phát triển trên khắp thế giới đã cung cấp rất nhiều công cụ bổ sung, có thể giúp bạn làm việc hiệu quả hơn với Visual Studio.
Bài viết này sẽ giới thiệu những công cụ như vậy, chúng hoàn toàn miễn phí, thậm chí còn là mã nguồn mở, bạn có thể sử dụng mà không phải trả bất cứ một khoản lệ phí nào (dù vẫn có những thỏa thuận bản quyền phải tuân theo).
Code Project Browser
Trang chủ: http://www.codeproject.com
Loại dự án: Mã nguồn mở
Nếu là "tín đồ” của lập trình Windows/.NET, bạn không thể không biết đến The Code Project, trang web hàng đầu cung cấp hàng chục nghìn bài báo/dự án về lập trình. Đây quả là kho dữ liệu phong phú với mọi lập trình viên. Còn gì tuyệt hơn khi bạn có thể tham khảo các bài báo của Code Project ngay trong VS?
Sau khi cài đặt, Code Project Browser sẽ tích hợp vào menu Tools của VS, bạn chỉ việc nhấn vào đây để bắt đầu. Chú ý là trong lần chạy đầu tiên, bạn cần nhập địa chỉ email và mật khẩu mà bạn đã đăng kí trên The Code Project.
Không chỉ là trình duyệt, công cụ này còn cho phép bạn mở mã nguồn mẫu của các bài báo chỉ với vài cú nhấn chuột. Thay vì phải tải về mã nguồn, giải nén và mở bằng VS, Code Project Browse làm tất cả việc này cho bạn.
Khi nhấn vào một link file .zip chứa mã nguồn, bạn sẽ được hỏi có mở dự án này không. Nếu có, add-in này sẽ tải dự án về, giải nén trong thư mục My Documents/ My Code Project Downloads và mở nó trong VS. Hơn thế nữa, bạn còn có thể quản lý các bài báo/dự án yêu thích trên Code Project thông qua công cụ này.
Bạn sẽ không phải duyệt Code Project bằng trình duyệt thông thường thêm một lần nào nữa! Bạn có thể tải và cài đặt add-in này từ địa chỉ http://www.codeproject.com/csharp/cpbrowser.asp


Ankhsvn: Quản lý phiên bản với Visual Studio

Trang chủ: http://ankhsvn.tigris.org
Loại dự án: Mã nguồn mở.
Nếu bạn làm việc theo nhóm trong các dự án lớn thì quản lý phiên bản mã nguồn là một công việc rất quan trọng. Có rất nhiều công cụ giúp bạn thực hiện việc này, nhưng nếu sử dụng chính Visual Studio thì sẽ tiện hơn nhiều. AnkhSVN là một bổ sung cho Visual Studio (từ phiên bản .NET 2002 trở đi) để hỗ trợ hệ thống quản lý mã nguồn Subversion. Nó cho phép bạn thực hiện hầu hết các thao tác quản lý phiên bản, ngay bên trong VS IDE. Hiện AnkhSVN chưa hỗ trợ tất cả các chức năng của SVN, nhưng phần lớn các thao tác sử dụng trong công việc hàng ngày đều đã được cung cấp.
AnknSVN phiên bản mới nhất là 1.0.1.2736 (stable), dung lượng 3.88 MB, tải về tại địa chỉ:
http://ankhsvn.tigris.org/servlets/ProjectDocumentList?folderID=7315

Chú ý là để sử dụng AnkhSVN bạn cần tải và cài đặt Subversion trước. Phiên bản hiện tại là 1.45, tải từ địa chỉ: http://subversion.tigris.org/project_packages.html
Code Style Enforcer: Chuẩn hóa mã nguồn
Trang chủ: http://joel.fjorden.se/static.php?page=CodeStyleEnforcer
Loại dự án: Miễn phí.
Chuẩn hóa mã nguồn theo những qui tắc nhất định luôn là yêu cầu bắt buộc đối với các lập trình viên chuyên nghiệp. Tuy nhiên, nếu không muốn bận tâm với việc này, bạn có thể để Code Style Enforcer làm việc đó cho bạn. Bổ sung này sẽ phát hiện những chỗ mã nguồn không hợp chuẩn và đưa ra phương án chỉnh sửa
Code Style Enforce là một plug-in của DXCode cho Visual Studio 2005, giúp kiểm tra mã nguồn thông qua các quy tắc đã được định nghĩa sẵn. Được phát triển cho C#, nhưng CSE có thể làm việc với VB .NET (chưa được kiểm tra). Chuẩn mã nguồn hiện có thể cấu hình với những quy tắc nhất định. Quy tắc mặc định dựa trên chuẩn viết mã C# của IDesign (http://www.idesign.net), đây là chuẩn viết mã hoàn chỉnh nhất hiện có và có thể tải về miễn phí.
Mỗi khi mở một dự án mới, Code Style Enforcer sẽ hỏi bạn sử dụng các quy tắc chung dành cho tất cả các dự án hay dành riêng cho từng dự án một. Điều này rất có ích nếu bạn cùng lúc tham gia làm nhiều dự án với nhiều nhóm khác nhau.
Code Style Enforcer sẽ gạch chân những biến, method không tuân theo quy tắc, tất cả những gì bạn cần làm là nhấn chuột phải và chọn Correct CSE Violation, với 2 tùy chọn nhỏ hơn: Sửa ngay lập tức theo những gì mà công cụ đề xuất, hay xem trước những thay đổi đối với mã của bạn (chỉ xuất hiện trong một số trường hợp):
Code Style Enforcer hiện chỉ chạy được trên Visual Studio 2005, do công cụ này hoàn toàn dựa trên .NET 2.0. Phiên bản mới nhất là 2.1.29, dung lượng 564KB. Cần chú ý, để cài đặt, trước tiên bạn cần tải và cài đặt bổ sung DXCore cho Visual Studio, phiên bản mới nhất là 2.5.1, dung lượng 17.3MB, tải về từ địa chỉ http://www.devexpress.com/Downloads/NET/IDETools/DXCore/


Pinvoke.net: Đơn giản hóa Windows API

Trang chủ: http://www.Pinvoke.net
Loại dự án: miễn phí (yêu cầu đăng kí)
Mặc dù .NET framework cung cấp hầu hết các hàm và công cụ mà lập trình viên cần, nhưng không tránh khỏi những khi phải "cầu viện" đến Windows APIs thông qua dịch vụ PInvoke. Việc này tuy không khó, nhưng đòi hỏi lập trình viên phải khai báo khá nhiêu khê và phức tạp. PInvoke.net là một plug-in giúp bạn giải quyết rắc rối này bằng cách truy cập đến trang web PInvoke.net để lấy các dữ liệu cần thiết về hàm API cần dùng và khai báo giúp bạn.
Sau khi cài đặt, PInvoke sẽ xuất hiện trong một menu riêng của Visual Studio. Khi cần sử dụng hàm API nào, bạn sẽ có 2 tùy chọn: Insert PInvoke signature: sử dụng các signature đã có sẵn của plug-in này hay là truy cập đến PInvoke.net để sử dụng các đoạn mã (có thể) chính xác và đầy đủ hơn.
PInvoke.Net tương thích với Visual Studio.NET 2003 (7.1) trở lên, chưa hỗ trợ VS 2008, dung lượng chỉ có 288 KB.
Power Toys Pack Installer: Luôn cập nhật Visual Studio của bạn

Trang chủ: http://www.codeplex.com/
Loại dự án: mã nguồn mở.
Thay vì phải liên tục theo dõi những gói bổ sung cho Visual Studio từ trang web của Microsoft và các trang khác, tải về và cài đặt, Power Toys Pack Installer sẽ làm việc đó cho bạn. Chương trình kiểm tra các bổ sung mới hoặc được cập nhật. Tất cả những gì bạn cần làm chỉ là đánh dấu chọn bổ sung thích hợp với mình và nhấn Install! Power Toys Pack Installer sẽ tự động tải về và cài đặt cho bạn.
Chương trình hiện có phiên bản mới nhất 1.0.1, dung lượng 504 KB, không cần cài đặt. Tải về từ địa chỉ: http://www.codeplex.com/PackInstaller/Release/ProjectReleases.aspx?ReleaseId=4274
GhostDoc: Tạo tài liệu từ mã nguồn
Trang chủ: http://www.roland-weigelt.de/ghostdoc .
Loại dự án: miễn phí.
Với comment (chú thích) dạng XML của C#, việc tạo tài liệu từ mã nguồn trở nên dễ dàng hơn rất nhiều, và có không ít công cụ giúp bạn thực hiện công việc đó. Tuy nhiên, chính việc comment theo định dạng XML chưa chắc đã "thú vị”. GhostDoc sẽ giải phóng bạn khỏi sự "nhàm chán".
Công cụ này cho phép tự động tạo comment theo định dạng XML cho một method từ kiểu, tham số, tên của nó cũng như các thông tin ngữ cảnh khác. Tất cả những việc bạn cần làm là chọn một method cần chú thích, nhấn chuột phải và chọn Document This. Điều tuyệt vời là GhostDoc cho phép bạn thiết lập định dạng Comment và những quy tắc đoán tên kiểu, tham số... cho phù hợp với phong cách viết mã của bạn.
Sau khi cài đặt, GhostDoc sẽ bổ sung thêm vào Menu Tools của VS một Submenu với 2 mục nhỏ hơn: Configure GhostDoc cho phép cấu hình GhostDoc và Document This (đôi khi sẽ disable) sẽ tự động comment cho file .cs hiện tại.
Mặc dù GhostDoc không phải lúc nào cũng làm việc chính xác, nhưng công cụ này rất đáng cho bạn sử dụng.
Hiện phiên bản mới nhất của GhostDoc là 2.1.1, dung lượng 898KB. Có 2 phiên bản dành riêng cho Visual Studio 2005 và 2008, đều hỗ trợ VB (có hạn chế) và Windows Vista. Phiên bản gần nhất dành cho VS 2003 là 1.30, chỉ hỗ trợ C# và không hỗ trợ Vista.
CodeKeep: Quản lý và chia sẻ Codesnippets
Trang chủ: http://www.codekeep.net .
Loại dự án: Miễn phí.
Một trong những thế mạnh của Visual Studio chính là Codesnippets, giúp lập trình viên sử dụng các đoạn mã có sẵn một cách nhanh chóng, thay vì phải code một cách thủ công.
CodeKeep nâng Code Snippets lên một tầm cao mới khi cho phép các lập trình viên trao đổi, chia sẻ các Snippet mà mình tạo ra. Điều này giúp bạn tiết kiệm được rất nhiều thời gian và sức lực, đồng thời đặc biệt hữu ích cho các bạn lập trình viên trẻ muốn học hỏi kinh nghiệm từ các "Guru".
Để có thể sử dụng CodeKeep, bạn phải tạo một account mới tại trang chủ của dự án này. Account này cho phép bạn tải lên và chia sẻ các snippet dễ dàng hơn.
CodeKeep sẽ thêm một submenu với 5 tính năng thiết lập, quản lý, duyệt, tìm kiếm và bổ sung để bạn làm việc với snippet. Trong đó đáng kể nhất là chức năng tìm kiếm. Mỗi khi cần bổ sung đoạn mã làm công việc nhất định mà không muốn phải tự viết code, bạn có thể sử dụng tính năng này để tìm kiếm các snippet thực hiện công việc tương tự. Chỉ việc gõ từ khóa, chẳng hạn Shutdown Windows, nhấn nút Go, đợi trong giây lát và chọn snippet phù hợp để sử dụng. Thật là tiện lợi!
Phiên bản mới nhất của công cụ này là 2.5, chỉ tương thích với Visual Studio 2005, dung lượng 85KB, tải tại địa chỉ: http://www.codekeep.net/downloads/CodeKeepVS2005Addin2.5.zip.
Lời kết: trên đây chỉ là những bổ sung phổ biến nhất cho Visual Studio. Chắc chắn còn nhiều bổ sung hữu ích khác mà bài viết chưa nói tới, rất mong được các bạn trao đổi, chia sẻ kinh nghiệm. Ngoài ra, các bổ sung tuy hay, nhưng đồng thời chúng cũng làm Visual Studio nặng nề hơn, dễ bị "crash" hơn, vì vậy các bạn nên thận trọng và chỉ sử dụng các bổ sung thật sự cần thiết với mình.

String Format trong C#

Trong khi lập trình, chúng ta thường gặp phải rất nhiều trường hợp cần định dạng lại một chuỗi như chuỗi số, chuỗi ngày tháng sao cho đúng yêu cầu.

Ví dụ: định dạng ngày tháng: MM/dd/yyyy ta muốn chuyển sang dd/MM/yyyy cho thuần Việt.

Sau đâu là các kiểu chuyển đổi, định dạng chuỗi trong C#

Định dạng số chữ số sau dấu chấm trong số thập phân

String.Format("{0:0.00}", 123.4567);      // "123.46"
String.Format("{0:0.00}", 123.4);         // "123.40"
String.Format("{0:0.00}", 123.0);         // "123.00"
Định dạng số chữ số trước dấu chấm trong số thập phân
String.Format("{0:00.0}", 123.4567);      // "123.5"
String.Format("{0:00.0}", 23.4567);       // "23.5"
String.Format("{0:00.0}", 3.4567);        // "03.5"
String.Format("{0:00.0}", -3.4567);       // "-03.5"
Thêm dấu ngăn cách hàng nghìn
String.Format("{0:0,0.0}", 12345.67);     // "12,345.7"
String.Format("{0:0,0}", 12345.67);       // "12,346"
Thêm số 0 vào trước số
String.Format("{0:00000}", 15);          // "00015"
String.Format("{0:00000}", -15);         // "-00015"
Căn số sang phải hay trái dựa vào kích cỡ ta cung cấp
String.Format("{0,5}", 15);              // "   15"
String.Format("{0,-5}", 15);             // "15   "
String.Format("{0,5:000}", 15);          // "  015"
String.Format("{0,-5:000}", 15);         // "015  "
Định dạng ngày tháng
String.Format("{0:M/d/yyyy}", dt);            // "3/9/2008"
String.Format("{0:MM/dd/yyyy}", dt);          // "03/09/2008"
String.Format("{0:t}", dt);  // "4:05 PM"                         ShortTime
String.Format("{0:d}", dt);  // "3/9/2008"                        ShortDate
String.Format("{0:T}", dt);  // "4:05:07 PM"                      LongTime
String.Format("{0:D}", dt);  // "Sunday, March 09, 2008"          LongDate
String.Format("{0:f}", dt);  // "Sunday, March 09, 2008 4:05 PM"  LongDate+ShortTime
String.Format("{0:F}", dt);  // "Sunday, March 09, 2008 4:05:07 PM" FullDateTime
String.Format("{0:g}", dt);  // "3/9/2008 4:05 PM"                ShortDate+ShortTime
String.Format("{0:G}", dt);  // "3/9/2008 4:05:07 PM"             ShortDate+LongTime
String.Format("{0:m}", dt);  // "March 09"                        MonthDay
String.Format("{0:y}", dt);  // "March, 2008"                     YearMonth
String.Format("{0:r}", dt);  // "Sun, 09 Mar 2008 16:05:07 GMT"   RFC1123
String.Format("{0:s}", dt);  // "2008-03-09T16:05:07"             SortableDateTime
Hi vọng với những ví dụ trên, các bạn có thể định dạng các chuỗi hiển thị lên ứng dụng của mình một cách khoa học nhất.

Một số jQuery Slideshow đẹp

jQuery đã và đang trở thành một công cụ rất hữu dụng cho các nhà thiết kế web. Một trong những thành công là tạo ảnh trượt (gallery, slideshow, carousel...). Hôm nay mình sẽ giới thiệu tới các bạn vài plugin mà bạn nên tham khảo khi dự định tạo một slideshow của riêng mình.

Slides

Jquery Slideshow

Nivo Slider

Jquery Slideshow cuc dep

TN3 Gallery

Jquery Slideshow dep

Pikachoose

Jquery Slideshow dep

Coin Slider

Jquery Slideshow dep

Galleria

Một vài Jquery Slideshow bạn không nên bỏ qua

Orbit

Một vài Jquery Slideshow bạn không nên bỏ qua

Supersized

Một vài Jquery Slideshow bạn không nên bỏ qua

Advanced jQuery Background Image Slideshow

Một vài Jquery Slideshow bạn không nên bỏ qua

s3Slider jQuery Plugin

Một vài Jquery Slideshow bạn không nên bỏ qua

Skitter

Một vài Jquery Slideshow bạn không nên bỏ qua

ResponsiveSlides

Một vài Jquery Slideshow bạn không nên bỏ qua

Sideways

Một vài Jquery Slideshow bạn không nên bỏ qua

Chúc các bạn lựa chọn được Slideshow phù hợp nhất cho mình.

Nhúng google map vào website

Bạn là chủ của một cửa hàng kinh doanh, chủ một shop quần áo, chủ một quán ăn ngon hay chủ một doanh nghiệp … bạn muốn website của mình có một thông tin gì đó trực quan để khách hàng có thể dễ tìm đến bạn, giải pháp tốt cho chúng ta là google map hay bản đồ google.
Hầu hết ai cũng bít đến google map đây là một công cụ định vị bản đổ rất nổi tiếng, toàn bộ bề mặt trái đất đều có ở trong bản đồ google này, kể cả địa chỉ bạn muốn nhúng vào webiste. Khách hàng sẽ không mất nhiều thời gian để tìm bỏ công tra cứu đường đi đến bạn nếu như ta sử dụng dịch vụ này.
Việc nhúng bản đồ của google vào website của bạn cũng khá đơn giản thôi, đầu tiên bạn đăng ký với google một tài khoản đó chính là Gmail của bạn. Sau đó đăng nhập vào tài khoảng ấy tiếp đến truy cập vào link: https://maps.google.com/maps, bạn click vào Địa điểm của tôi.
nhung google map vao website
Chọn Địa điểm của tôi trong google map
Sau đó bạn nhìn bên phải tim địa chỉ nào bạn muốn nhúng vào website, giả sử mình chọn địa chỉ trường ĐH Công Nghiệp Hà Nội. Sau đó chọn Lưu vào. Sau đó chọn tạo bạn đồ mới và lưu lại.
nhung google map vao website
Chọn địa điểm sử dụng trong bản đồ google
Sau đó nếu bạn muốn chỉnh sửa thì bấm vào Chỉnh sửa bên sidebar trái của google map. Ở đây bạn có thể chỉnh sửa tiêu đề hiển thị, dòng ghi chú cho bản đồ của bạn.
nhung google map vao website
Edit địa chỉ đã chọn trên Google map
Các bước đến đây gần như là hoàn thành, bạn xem lại địa chỉ ok thì ta get code mang về để vào web là chúng ta có bản đồ cho doanh nghiệp mình trên website.
Bạn click vào biểu tượng hình liên kết thân quen của mình và dòng dưới là dòng google cho chúng ta nhúng vào web. Bạn có thể thay đổi kích thước của frame (khung) này sao cho phù hợp với giao diện website của bạn.
Nhúng google map vào website
Kết luận: Việc nhúng bản đồ của google vào website có nhiều cách, trên là cách đơn giản nhất giờ chỉ việc style CSS lại cho đẹp là OK. Chúc thành công!










Tạo form tìm kiếm dạng Expandable Search

Để tạo một form tìm kiếm khi di chuột vào, nó sẽ mở rộng textbox tìm kiếm ra, chúng ta sử dụng HTML và CSS3 như sau:

HTML

<form>

<input type="search" placeholder="Tìm kiếm">

</form>

CSS3

Reset Search Input

input {

outline: none;}

input[type=search] {

-webkit-appearance: textfield;

-webkit-box-sizing: content-box;}

Đến phần định dạng phần input tìm kiếm

input[type=search] {

background:#fff url(img.png) no-repeat right center;

border: solid 1px #a3a3a3;

padding: 10px 30px 10px 10px;

margin-left:300px;

width: 150px;}

Bo góc

input[type=search] {

-webkit-border-radius: 20px;

-moz-border-radius: 20px;

border-radius: 20px;}

Hiệu ứng Transition

input[type=search] {

-webkit-transition: all 0.5s linear;

-moz-transition: all 0.5s linear;

-o-transition: all 0.5s linear;

transition: all 0.5s linear;}

Cuối cùng khi rê chuột vào phần search

input[type=search]:focus {

width: 250px;

background-color: #fff;

border-color: #6dcff6;

-webkit-box-shadow: 0 0 5px rgba(109,207,246,0.5);

-moz-box-shadow: 0 0 5px rgba(109,207,246,0.5);

box-shadow: 0 0 5px rgba(109,207,246,0.5);}

Tạo form tìm kiếm dạng Expandable Search

Chúc các bạn thành công!

Tạo mật khẩu ngẫu nhiên trong ASP.NET

Trên các diễn dàn hoặc các website nếu họ có chức năng đăng kí và quản lí thành viên thì đều có 1 chức năng đó là lấy lại mật khẩu. Khi lấy lại mật khẩu thì bạn luôn không lấy được mật khẩu mình đã quên mà lấy được một mật khẩu mới với một chuỗi các kí tự được sắp xếp ngẫu nhiên. Điều này là do các password đã được hash(băm - thuật toán băm dữ liệu->không thể lấy lại dữ liệu ban đầu). Vì thế bạn chỉ có thể nhận một password mới. Bài viết này mình xin hướng dẫn các bạn cách tạo một phương thức sinh password mới ngẫu nhiên.

public static string GenerateRandomPassword(int length)
        {
            string allowedLetterChars = "abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";
            string allowedNumberChars = "0123456789";
            char[] chars = new char[length];
            Random rd = new Random();
            bool useLetter =  true;
            for (int i = 0; i < length; i++)
            {
                if (useLetter)
                {
                    chars[i] = allowedLetterChars[rd.Next(0, allowedLetterChars.Length)];
                    useLetter = false;
                }
                else
                {
                    chars[i] = allowedNumberChars[rd.Next(0, allowedNumberChars.Length)];
                    useLetter = true;
                }
            }
            return new string(chars);
        }

Sau đó bạn gọi phương thức này ra khi bạn cần và truyền vào tham số là số kí tự cho password mới. Ví dụ như GenerateRandomPassword (6) và kết quả là z8BSGm. Hy vọng với chút thủ thuật nhỏ này các bạn có thể tạo được 1 module lấy lại mật khẩu trên web. Chúc các bạn thành công!

10 BÍ QUYẾT TRONG LẬP TRÌNH AJAX

Giờ đây, khi nhắc đến Ajax, chắc hẳn bạn - những người yêu thích lập trình - không còn cảm thấy xa lạ như trước kia mà thậm chí còn hình dung ra sự giản đơn và thuận tiện biết bao khi ứng dụng nó. Nhưng, liệu bạn đã nắm vững những quy tắc then chốt, những “mẹo nhỏ” hữu ích khi lập trình với Ajax chưa nhỉ? Dù bạn đã rõ hay...trót quên, vẫn xin mời bạn tham khảo bài viết này như một cách ôn lại kiến thức trọng tâm đầy bổ ích!
A. 10 lưu ý vàng cần ghi nhớ


1. Đánh dấu trang và quay lại
Khi tự bạn điều khiển những gì đang diễn ra trên website, sử dụng JavaScript để làm xuất hiện hay biến mất các đối tượng trên trang hay thậm chí là sau khi toàn bộ trang được hiển thị hoàn toàn, bạn sẽ nhanh chóng nhận ra rằng, nút Quay lại (Back) của trình duyệt đã mất hoàn toàn tác dụng! Nút Quay lại này hoạt động bằng cách dùng đối tượng ‘history’ của trình duyệt, lưu lại danh sách tất cả các trang đã được truy cập liên tiếp gần đây nhất. Nhưng, nếu bạn không mở bất kỳ trang mới nào (vâng, như bạn biết, Ajax không cần phải refresh trang khi cần hiển thị thông tin), thì đối tượng ‘history’ kia rõ ràng chẳng lưu được chút manh mối gì. Đây là điều bạn cần lưu ý khi viết các ứng dụng Ajax.
Và nếu như cần thiết, hãy trang bị cho site của bạn một nút Back của riêng mình. Người dùng có thể muốn quay lại cửa sổ trước đó và bạn có nhiệm vụ phải lưu giữ những thông tin di chuyển này. Thật đáng tiếc là ngay cả tiện ích đánh dấu trang (Bookmark) cũng trở nên vô dụng như thế! Đáp án cụ thể cho bài toán này ra sao, xin được dành câu trả lời cho bạn nghiên cứu.


2. Đưa ra thông báo trực quan
Phần lớn thời gian của mình, Ajax hoạt động một cách “thầm lặng” và điều này đôi khi “làm khó” người dùng. Nếu bạn tải về một lượng lớn thông tin và đang chờ đợi phản hồi từ phía máy chủ, chắc chắn một hình ảnh “nhấp nháy” nào đấy sẽ vô cùng có ích với người dùng. Một chiếc đồng hồ cát xoay tròn, và khách hàng sẽ biết rằng họ cần kiên nhẫn! Bức hình này nên là dạng ảnh động (.gif), đồng thời phối hợp với đoạn mã JavaScript dưới đây, hiệu ứng “ẩn, hiện” sẽ càng thêm phần thú vị:
document.getElementById(“image1”).style.visibility= “visible”;
document.getElementById(“image1”).style.visibility= “hidden”;
Rõ ràng rằng, người dùng luôn muốn thấy một tín hiệu nào đấy báo cho họ biết rằng kết nối đang được thực hiện, dạng như thanh tiến trình màu xanh với các gạch nối càng lúc càng đầy cũng là một ý tưởng không tồi, và chắc chắn họ sẽ hài lòng với site của bạn!


3. Hãy để người dùng "tự nhiên"
Các ứng dụng Ajax dường như đang tự mình thi hành “phận sự” bởi chúng được thực thi phía sau giao diện người dùng. Chúng luôn sẵn sàng kết nối tới server, ngay cả khi người dùng không hề mong muốn – trong trường hợp họ vô tình gõ nhầm thông tin chẳng hạn. Rất dễ hình dung cảm giác lúc đó của bạn ra sao, khi ngay lúc bạn vừa gõ một chữ nào đấy, lập tức thông tin này đã được lưu lại database mà chẳng hề “xin phép” lấy một lời. Vậy nên, để tốt nhất, bạn hãy lưu ý một số điều nhỏ sau:
- Đừng bao giờ lưu thông tin ngay lập tức, vừa tốn băng thông mà chưa chắc đã được sự đồng ý của người dùng.
- Hãy nhớ rằng, người dùng luôn muốn “giao tiếp” nhiều hơn với ứng dụng. Hãy làm các thủ tục xác thực dữ liệu ngắn gọn hơn, đỡ mất thời gian hơn và cho người dùng quyền quyết định khi nào thì cần xác thực. Đấy chính là yếu tố tiên quyết trong quá trình thiết kế giao diện người dùng!
- Cuối cùng, đừng quên cung cấp cho người dùng cách thức “sửa sai” thao tác (Undo).


4. Ghi nhớ các trình duyệt
Thế giới thật rộng lớn và cũng có rất nhiều trình duyệt! Người dùng sử dụng trình duyệt họ yêu thích, còn bạn, sẽ ra sao khi chỉ kiểm tra ứng dụng của mình trên một loại trình duyệt mà thôi? Sẽ thật tệ nếu bạn chỉ viết riêng cho Internet Explorer, Firefox mà quên mất rằng, trong thế giới World Wide Web, có vô vàn trình duyệt khác nhau, có loại thậm chí còn không hỗ trợ JavaScript, loại khác lại mặc định tắt chúng đi! Hãy ghi nhớ điều này và xây dựng trước một phương án dự phòng không bao giờ là thừa cả.


5. Cho người dùng thấy sự thay đổi
Sức mạnh của Ajax chính là việc hiển thị dữ liệu trên một trang không cần refresh bằng cách dùng thẻ <meta id="refresher"> hay ngay cả các đối tượng thuần HTML như textbox chẳng hạn. Ứng dụng Ajax có thể thay đổi dữ liệu ngay sau khi chúng thông báo tới server, nhưng lại không thông báo với người dùng. Lấy ví dụ, bạn có một bảng dữ liệu và mặc định rằng sẽ được tự động cập nhật ngay khi database có thay đổi. Người dùng có thể không nhận thấy rằng thông tin đã không còn như trước, rằng bạn đã thay đổi thành phần trang, và đương nhiên là họ đã hụt mất những thông tin quan trọng. Lại một lần nữa, việc phát ra “tín hiệu” thay đổi tới người dùng sẽ giúp bạn rất nhiều. Nếu bạn vừa thay đổi một số chữ, đơn giản thôi, hãy làm cho nó hiển thị khác đi một chút. Đoạn mã sau dùng để thay đổi màu chữ trong thẻ <Div> thành màu đỏ bằng cách sử dụng linh hoạt thuộc tính style:
document.getElementById(“targetDiv”).style.color = “red”;
Còn nếu bạn muốn thay đổi màu nền, hãy dùng đoạn mã
document.getElementById(“targetDiv”).style.background-color = “red”;
Trong đó, “targetDiv” là mã ký hiệu của thẻ Div mà bạn gán cho.


6. Tránh làm chậm trình duyệt
Những ứng dụng Ajax có thể rất lớn và chắc chắn chiếm dụng một lượng tài nguyên vật lí không nhỏ. Tốc độ CPU, bộ nhớ RAM có thể bị “ngốn” rất nhiều nếu như bạn không quan tâm xử lí những đối tượng phức tạp trong quá trình khởi tạo hay tham chiếu. Thông thường, một số nhà phát triển ứng dụng lại xài Ajax cũng chỉ bởi vì nó đang “nóng”!! Quan niệm này cần được lưu tâm hơn! Đúng vậy, Ajax có thể giải quyết được nhiều vấn đế, nhưng bạn không nhất thiết phải dùng nó nếu chẳng có lí do gì. Đừng quên rằng, không phải trình duyệt nào cũng hỗ trợ Ajax (hoặc thậm chí ở chế độ mặc định tắt JavaScript). Vậy nên, đừng vì độ “hot” của Ajax mà quên đi mất tính khả dụng và tôc độ của chương trình bạn nhé!


7. Quản lý những thông tin riêng tư
Với Ajax, thật dễ để bạn gửi thông tin lên server mà không cần sự chú ý của người dùng. Nói theo cách khác, quá trình liên lạc giữa máy khách (client) và máy chủ (server) được diễn ra một cách “thầm lặng”. Nhưng sự thật là, không phải người dùng nào cũng muốn gửi thông tin lên server ngay. Bạn hãy lưu tâm đến vấn đề nhạy cảm này! Mặc dù thương mại điện tử tại Việt Nam chỉ mới chập chững những bước đầu tiên, những tổn thất xảy ra là điều không thể tránh khỏi, nhưng chính vì thế bạn càng phải nâng cao tinh thần bảo vệ người dùng. Internet rõ ràng đầy rẫy những cạm bẫy và sự thật thì môi trường này không phải là nơi hoàn hảo để lưu giữ thông tin có tính riêng tư. Nếu bạn định gửi mã số Thẻ tín dụng hoặc mã Bảo mật của thẻ mà không được sự đồng ý của người dùng, rất có thể bạn sẽ phải đói mặt với nhiều rắc rối! Do đó, hãy cho người dùng thấy được lợi ích của việc hoài nghi: Luôn hỏi trước khi gửi dữ liệu!


8. Xây dựng phương án dự phòng
Sự sống còn của Ajax phụ thuộc vào tín hiệu kết nối tới server, nhưng người dùng thì không phải lúc nào cũng trực tuyến. Server của bạn có thể bị “chết đứng” bất cứ lúc nào, và người dùng rất có thể đang làm việc với các thông tin được lưu trong bộ đệm trình duyệt từ trước đó! Nếu bạn không thể kết nối đến server khi đang online, thì việc xây dựng một phương án dự phòng là rất cần thiết (một server dự trữ chẳng hạn). Cũng đừng quên việc hỗ trợ các trình duyệt không có JavaScript nữa nhé!


9. Hiển thị thông tin trên các cỗ máy tìm kiếm
Cơ chế tìm kiếm của Google dựa trên việc sàng lọc thông tin từ hàng tỉ website theo thông số mà người dùng cung cấp, nhưng ứng dụng Ajax của bạn lại load thông tin lên dựa trên sự tương tác của người dùng mà chẳng cần refresh lại trang - điều này khiến Google sẽ không thể “nhìn” thấy được những thông tin như thế. Vậy nên ghi nhớ kỹ rằng, để thông tin trên website của bạn có thể được các cỗ máy tìm kiếm “mò” tới, bạn cần cung cấp những dữ liệu đặc tả nội dung trang. Làm điều này như thế nào? Không khó! Chỉ cần sử dụng các thẻ<meta> đặt trong phân đoạn của mã trang, các cỗ máy tìm kiếm có thể “đánh dấu” bạn dễ dàng! Và nếu thực sự hứng thú về các thẻ <meta> này, mời bạn ghé qua địa chỉ sau đây để tìm hiểu thêm cặn kẽ:http://www.seocentro.com/tools/search-engines/metatag-analyzer.html


10. Cuối cùng, xin lưu ý đến bộ đệm trình duyệt
Một số trình duyệt như Internet Explorer thường lưu lại thông tin về các website đã truy cập trong bộ đệm riêng của nó (thuật ngữ chuyên ngành gọi là “cache”). Điều này đồng nghĩa với việc, nếu ai đó truy cập đến cùng một địa chỉ URL trong một khoảng thời gian giới hạn nào đấy, thông tin hiện lên cho họ có thể chính là những thông tin vừa xem (được lấy ra từ cache).
Về nguyên tắc, điều này làm quá trình tải trang nhanh chóng hơn, các thông tin được coi là giống với lần truy cập trước có thể sẽ không cần phải tải về lần nữa, mà chỉ cần lấy từ cache ra và hiển thị lên. Nhưng với các website có ứng dụng Ajax thì đây đúng là một vấn đề lớn! Tại sao lại như vậy? Rất đơn giản, ở Ajax không có tính năng làm mới toàn bộ trang mà chỉ là một vài thành phần trong trang! Do đó, nếu khi bạn đã thay đổi dữ liệu trên trang mà kết quả trả về giống hệt như lúc trước thì không còn nghi ngờ gì nữa, bạn chắc hẳn đã gặp rắc rối rồi! Vậy nên, để hạn chế việc lưu thông tin đệm trong ứng dụng Ajax, bạn có thể đặt nhiều thông số header khác nhau khi gửi trả dữ liệu từ server, như đoạn code PHP dưới đây:
header(“Cache-Control”, “no-cache”);
header(“Du-lieu-header-tuy-y”, “no-cache”);
header(“Expires”, “-1”);
Mặc dù vậy, đoạn code trên lại không có tác dụng gì với Internet Explorer do việc lưu thông tin trong cache của IE lại phụ thuộc phần lớn vào địa chỉ trình duyệt. Do đó, có một cách rất hay là luôn thay đổi địa chỉ ứng dụng khi truy vấn đến server. Để làm điều này, bạn chỉ cần khai báo một biến ngẫu nhiên nào đấy (mà server chẳng dùng làm gì) vào phần cuối của địa chỉ, chẳng hạn như:
var myUrl = “data.php?name=bcvt” + “&t=” + new Date().getTime();
Một ý tưởng không tồi khi đưa thêm biến “t” vào địa chỉ URL trên, với “t” là thời gian hiện tại tính bằng mili giây. Vì địa chỉ này chắc chắn chưa từng được truy cập, nó sẽ không bị lưu trong bộ đệm cache trước đây và ứng dụng của bạn chắc chắn sẽ chạy “ngon lành”!


B. Lời kết
Như bạn thấy đó, việc lập trình Ajax tuy hết sức thú vị những cũng ẩn chứa nhiều “rắc rối nho nhỏ” phải không nào? Nếu không biết cách khắc phục chúng hoặc không để ý lưu tâm, các ứng dụng của bạn rất có thể sẽ hoạt động không được như mong muốn khi thiết kế. Hy vọng qua bài viết, các bạn hiểu được phần nào những “yếu điểm” của Ajax để từ đó tìm tòi hơn, sáng tạo ra những “chiêu thức” khắc phục cho riêng mình.

Theo TC BCVT & CNTT

KIỂM TRA GOOGLE PAGERANK TRONG ASP.NET

Google Pagerank là một chỉ số quan trọng trong SEO. Nhưng bạn đã biết cách để kiểm tra nó với ASP.NET. Hôm nay mình xin giới thiệu cho các bạn cách để tạo ra một module để check google pagerank. Module chỉ mang tính chất demo nên mình sẽ làm đơn giản.
Bước 1: Giao diện

<div>
            Nhập tên miền: <asp:TextBox ID="txtDomain" runat="server"/>
            <asp:Button ID="btnCheck" runat="server" Text="Check" onclick="btnCheck_Click"
                style="height: 26px" /><br />
            Google Pagerank <asp:Label ID="lbPageRank" runat="server" />
    </div>
Bước 2: Tạo class check Pagerank
Đây là những thuật toán mà google sẽ sử dụng để check pagerank cho bạn.
public class GooglePR
{
    public GooglePR()
    {
    }
    private const UInt32 myConst = 0xE6359A60;
    private static void _Hashing(ref UInt32 a, ref UInt32 b, ref UInt32 c)
    {
        a -= b; a -= c; a ^= c >> 13;
        b -= c; b -= a; b ^= a << 8;
        c -= a; c -= b; c ^= b >> 13;
        a -= b; a -= c; a ^= c >> 12;
        b -= c; b -= a; b ^= a << 16;
        c -= a; c -= b; c ^= b >> 5;
        a -= b; a -= c; a ^= c >> 3;
        b -= c; b -= a; b ^= a << 10;
        c -= a; c -= b; c ^= b >> 15;
    }
    public static string PerfectHash(string theURL)
    {
        string url = string.Format("info:{0}", theURL);
        int length = url.Length;
        UInt32 a, b;
        UInt32 c = myConst;
        int k = 0;
        int len = length;
        a = b = 0x9E3779B9;
        while (len >= 12)
        {
            a += (UInt32)(url[k + 0] + (url[k + 1] << 8) +
                 (url[k + 2] << 16) + (url[k + 3] << 24));
            b += (UInt32)(url[k + 4] + (url[k + 5] << 8) +
                 (url[k + 6] << 16) + (url[k + 7] << 24));
            c += (UInt32)(url[k + 8] + (url[k + 9] << 8) +
                 (url[k + 10] << 16) + (url[k + 11] << 24));
            _Hashing(ref a, ref b, ref c);
            k += 12;
            len -= 12;
        }
        c += (UInt32)length;
        switch (len)
        {
            case 11:
                c += (UInt32)(url[k + 10] << 24);
                goto case 10;
            case 10:
                c += (UInt32)(url[k + 9] << 16);
                goto case 9;
            case 9:
                c += (UInt32)(url[k + 8] << 8);
                goto case 8;
            case 8:
                b += (UInt32)(url[k + 7] << 24);
                goto case 7;
            case 7:
                b += (UInt32)(url[k + 6] << 16);
                goto case 6;
            case 6:
                b += (UInt32)(url[k + 5] << 8);
                goto case 5;
            case 5:
                b += (UInt32)(url[k + 4]);
                goto case 4;
            case 4:
                a += (UInt32)(url[k + 3] << 24);
                goto case 3;
            case 3:
                a += (UInt32)(url[k + 2] << 16);
                goto case 2;
            case 2:
                a += (UInt32)(url[k + 1] << 8);
                goto case 1;
            case 1:
                a += (UInt32)(url[k + 0]);
                break;
            default:
                break;
        }
        _Hashing(ref a, ref b, ref c);
        return string.Format("6{0}", c);
    }
    public int MyPR(string myURL)
    {
        string strDomainHash = PerfectHash(myURL);
        string myRequestURL = string.Format("http://toolbarqueries.google.com/" +
               "tbr?client=navclient-auto&ch={0}&features=Rank&q=info:{1}",
               strDomainHash, myURL);
        try
        {
            HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(myRequestURL);
            string myResponse = new StreamReader(
                   myRequest.GetResponse().GetResponseStream()).ReadToEnd();
            if (myResponse.Length == 0)
                return 0;
            else
                return int.Parse(Regex.Match(myResponse,
                       "Rank_1:[0-9]:([0-9]+)").Groups[1].Value);
        }
        catch (Exception)
        {
            return -1;
        }
    }
}
 
Bước 3: Sử dụng lớp khai báo trên
protected void btnCheck_Click(object sender, EventArgs e)
    {
        GooglePR pr = new GooglePR();
        string url = txtDomain.Text; ;
        int google_page_rank = pr.MyPR(url);
        lbPageRank.Text ="của "+url+" là : "+ google_page_rank.ToString();
    }
Và đây là kết quả:

pagerank

pagerank

Chúc các bạn thành công!

Cách sử dụng ReCaptcha Trong Web ASP.NET

Trên các web hiện nay bạn đều thấy còn một loại captcha  được sử dụng khá phổ biến đó là  Google Recaptcha. Bài viết này mình xin hướng dẫn các bạn cách đăng kí và sử dụng captcha này.
Bước 1: Đăng kí recaptcha
Các bạn hãy vào trang http://www.google.com/recaptcha để đăng kí 1 tài khoản.

nhung recaptcha vao web aspnet

Sau khi đăng kí tài khoản thì bạn sẽ nhận được 1  public key và 1 private key. Bạn hãy copy lại 2 key này.

tao captcha trong asp.net

Để lấy được 2 key này bạn cần phải nhập tên website của bạn(không cần thiết phải chính xác).
Sau đó bạn hãy download recaptcha dll về tại đây
Bước 2: Tạo ứng dụng web sử dụng recaptcha
Tiếp theo bạn hãy tạo 1 ứng dụng web asp.net và Add Reference tới recaptcha dll mà bạn vừa download được.
Bạn hãy register dll cho trang bạn sử dụng.

<%@ Register TagPrefix="recaptcha" Namespace="Recaptcha" Assembly="Recaptcha" %>
Tiếp theo là phần giao diện:
<div>
         <recaptcha:RecaptchaControl    ID="recaptcha"
    runat="server"
    PublicKey="6LckeNQSAAAAAFpwu4ywENBgCFsPYarPC0aGpFub"
    PrivateKey="6LckeNQSAAAAAHJDm6_cj8kSKiBFrgArARhCpUWH"
    Theme="white"
    />
   <asp:Label Visible="false" ID="lblResult" runat="server" />
    <asp:Button ID="btnSubmit" runat="server" Text="Submit" onclick="btnSubmit_Click" />
  </div>
Phần giao diện gồm có recaptcha control, label thông báo lỗi và 1 button submit.
Và bây giờ chúng ta code cho phần behind code.
protected void Page_Load(object sender, EventArgs e)    {
        lblResult.Visible = false;
    }
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        lblResult.Visible = true;
        if (!recaptcha.IsValid)
        {
            lblResult.ForeColor = Color.Red;
            lblResult.Text = "Captcha is invalid.";
        }
        else
        {
            lblResult.ForeColor = Color.Green;
            lblResult.Text = "Captcha is valid";
        }
    }
Bây giờ save và run thôi:

nhung recaptcha vao web aspnet

nhung recaptcha vao web aspnet

OK, ngoài ra các bạn cũng phải có thể tùy biến theme cho recaptcha. ở đây mình dùng theme white, các bạn có thể dùng theme blackglass, red(theme mặc định,clean).
Các bạn có thể vào đây tham khảo thêm :https://developers.google.com/recaptcha/

Chúc bạn thành công!

7 thủ thuật tối ưu code để tăng tốc website

1. Chuyển host lưu trữ file hoặc ảnh cỡ lớn sang nơi khác
Nhiều người cùng online một lúc có thể làm nghẽn đường truyền của bạn với hàng đống yêu cầu xem cùng một tấm hình trên website. Gánh nặng dữ liệu có thể chuyển sang những website chuyên để lưu trữ và chia sẻ ảnh như ImagaShack, Photobucket hay Flickr. Bằng cách này, máy chủ web của bạn chỉ cần đảm bảo phần text và file ảnh cỡ nhỏ, giảm đáng kể băng thông đồng nghĩa với việc phục vụ được nhiều người một lúc hơn.
Nếu muốn chia sẻ những file nhỏ, khoảng 2 – 5MB, với khách viếng thăm, bạn có thể sử dụng dịch vụ Google Pages như một máy chủ web phụ.
2. Tối ưu hóa mã CSS
Hiện nay, nhiều website bắt đầu sử dụng CSS (Cascade Style Sheet) để định dạng. Mặc dù bảng CSS nhìn bắt mắt và hiệu quả hơn định dạng bảng HTML, nhưng nó đòi hỏi bạn phải tối ưu hóa code của chúng mới mong đạt được tốc độ tối ưu. Đoạn mã CSS “sạch” sẽ giúp trình duyệt giải mã trang web nhanh hơn.
Ví dụ: Thay vì viết:

margin-top: 20px;
margin-right: 10px;
margin-bottom: 20px;
margin-left: 10px;

Bạn nên viết:

margin: 20px 10px 20px 10px;

Theo các chuyên gia tối ưu hóa của Yahoo thì các mã CSS nên được đặt ở phần đầu của web. Điều này đặc biệt ý nghĩa nếu trang của bạn lớn và có nhiều đối tượng. Nếu bạn đặt CSS ở cuối hoặc giữa trang web, trình duyệt sẽ dùng định dạng mặc định để hiện thị, sau đó mới tái định dạng bằng CSS. Điều đó đòi hỏi thêm thời gian tính toán và tất nhiên người dùng sẽ khó chịu khi nhìn một website vỡ tung khi chưa định hình.Thậm chí, một số trình duyệt cũng cấm đặt CSS tại cuối website.
3. Tối ưu hóa hình ảnh
Có 4 loại định dạng hình ảnh sử dụng phổ biến trên web: PNG, JPG, /JPEG và GIF. Hầu hết các phần mềm xử lý ảnh như Adobe Photoshop đều có tính năng “Save for Web” để tối ưu tỉ lệ giữa chất lượng hình và kích thước file.
4. Khai báo kích thước hình ảnh
Nhiều lập trình viên nghiệp dư “quên” khai báo tag chiều cao và rộng của ảnh khi viết mã HTML. Hai thông số này báo với trình duyệt kích thước của ảnh trước khi dữ liệu được tải về. Nếu không được khai báo trước, trình duyệt phải tự tính toán kích thước bằng cách download toàn bộ hình ảnh về, sau đó mới đến lượt các dữ liệu khác.
Khi khai báo hình ảnh có đầy đủ các tag, trình duyệt sẽ dành 1 khoảng trống vừa đúng kích thước ảnh và tiếp tục tải dữ liệu. Như vậy, người xem có thể đọc ngay phần văn bản trong khi hình ảnh vẫn tiếp tục được hiện ra từng phần.
5. Giảm thiểu sử dụng Javascript
Các hiệu ứng hoạt hình của Java script rất bắt mắt và nhiều người có xu hướng đưa chúng vào website của mình. Tuy nhiên, sử dụng quá nhiều Javascript có thể làm trình duyệt bị treo cứng khiến người dùng bực mình. Phải cân nhắc thật kỹ lưỡng trước khi sử dụng chúng.
Vị trí đặt các đoạn mã script cũng khá quan trọng đối với tốc độ hiển thị. Lời khuyên của dân lập trình chuyên nghiệp: chỉ để những script thực sự quan trọng có ảnh hưởng toàn trang lên đầu, còn những hiệu ứng khác (hoạt hình, thống kê,…) thì cho xuống cuối trang.
Việc đưa Javascript và CSS ra liên kết bên ngoài tốt hơn là chèn thẳng vào trang web. Những file này sẽ được lưu tại bộ nhớ đệm (cache) của trình duyệt và người dùng sẽ không phải download lại chúng mỗi khi cần đến. Nó giảm đáng kể thời gian và băng thông của máy chủ cũng như người dùng.
6. Tối ưu hóa liên kết
Chú ý mỗi đường link được đặt trên website hay blog của bạn được viết một cách ngắn gọn và chính xác. Ví dụ mỗi entry trên 360 Yahoo đều có 1 phần “Permanent Link” để lấy liên kết chính xác và gọn gàng hơn nhiều so với những gì hiển thị trên ô địa chỉ (address bar) của trình duyệt. Việc sử dụng chính xác đường link sẽ giảm bớt những yêu cầu không đáng có đối với máy chủ trong một số trường hợp.
7. Giảm bớt các yêu cầu HTTP tới máy chủ
Khi mở website, mỗi đối tượng trên trang (hình ảnh, script, hình vẽ, đường kẻ, …) đều tạo ra 1 yêu cầu tới máy chủ để tải về. Tất nhiên, càng nhiều đối tượng thì việc tải về càng lâu hơn. Vì thế, hãy giảm thiểu số đối tượng trên cùng 1 trang và cố gắng gộp file CSS với các script lại với nhau.

Visual Studio 2010 VideoTraining

Bộ video hướng dẫn về C# 3.0, C# 4.0, LinQ, ASP.NET MVC 2.0, Combres, BlogSharp của tác giả Bửu Nguyễn

Visual Studio 2010 VideoTraining
LinkDownLoad: Download

Sự khác biệt giữa ASP.net MVC và ASP.net WebForm

Trước khi nêu ra sự khác biệt ASP.net MVC và ASP.net WebFrom ta cần biết một số khái niệm cơ bản về mô hình MVC.
1. Mô hình MVC cơ bản:

MVC là viết tắt chữ cái đầu của Models, Views, Controllers. MVC chia giao diện UI (User Interface) thành 3 phần tương ứng, đầu vào của các controller là các điều khiển thông qua HTTP request, model chứa các miền logic, view là những thứ được sinh ra trả về cho trình duyệt. Sau đây là một vài chi tiết trong 3 thành phần của MVC:

- Model: Được giao nhiệm vụ cung cấp dữ liệu cho cơ sở dữ liệu và lưu dữ liệu vào các kho chứa dữ liệu. Tất cả các nghiệp vụ logic được thực thi ở Model. Dữ liệu vào từ người dùng sẽ thông qua View để kiểm tra ở Model trước khi lưu vào cơ sở dữ liệu. Việc truy xuất, xác nhận và lưu dữ liệu là một phần của Model.

- View: Hiển thị các thông tin cho người dùng của ứng dụng và được giao nhiệm vụ cho việc nhận các dữ liệu vào từ người dùng, gởi đi các yêu cầu đến bộ điều khiển, sau đó là nhận lại các phản hồi từ bộ điề khiển và hiển thị kết quả cho người dùng. Các trang HTML, JSP, các thư viện thể và các file nguồn là một phần của View.

- Controller: là tầng trung gian giữa Model và View. Controller được giao nhiệm vụ nhận các yêu cầu từ phía máy khách. Một yêu cầu được nhận từ máy khách được thực hiện bởi một chức năng logic thích hợp từ thành phần Model và sau đó sinh ra các kết quả cho người dùng và được thành phần View hiển thị. ActionServlet, Action, ActionForm, struts-config.xml là các thành phần của Controller.


Lợi ích của việc dùng phương pháp MVC là sự phân đoạn rõ ràng giữa Models, Views, Controllers bên trong ứng dụng. Một cấu trúc sạch sẽ giúp cho việc kiểm tra ứng dụng của bạn dễ dàng hơn.

2. Một vài đặc tính trong ASP.net MVC.

- Tách rõ ràng các mối liên quan, mở khả năng test TDD ( Test Driven Developer). Có thể test unit trong ứng dụng mà không cần phải chạy Controllers cùng với tiến trình của ASP.net và có thể dùng bất kỳ một unit testing framework như NUnit, MBUnit, MS Test…

- Có khả năng mở rộng, mọi thứ trong MVC được thiết kế dễ dàng thay thế/ tùy biến (ví dụ có thể lựa chọn engine view riêng routing policy, parameter serialization, …).

- Bao gồm ánh xạ URL mạnh mẽ, cho phép xây dựng ứng dụng với những URL sạch, các URL không cần cs mở rộng (ví dụ có thể ánh xạ địa chỉ /Products/Edit/4 để thực hiện hành động edit của lớp điều khiển ProductControllers hoặc ánh xạ địa chỉ Blog/SomeTopic để thực hiện hành động “Display Topic” của lớp điều khiển BlogEngineController ).

- ASP.net MVC Framework cũng hỗ trợ file ASP.net như .ASPX .ASCX và .Master đánh dấu các tập tin này như một “view template” (có thể dễ dàng sử dụng các tính năng của ASP.net như lồng các trang Master, <%=%> snippets, mô tả server controls, template, data-binding, localization…). Tuy nhiên sẽ không còn postback và interactive back server và thay vào đó là interactive end-user với một controller class (không còn viewstate, page lifecycle).

- ASP.net MVC Framework hỗ trợ đầy đủ các tính năng bảo mật của ASP.net như Form/ Windows authenticate, URL authorization, membership/roles, output và data caching, section/ profile state, configuration system, provider architecture, …

3. Sự khác biệt Giữa MVC và WebForm:

- ASP.net WebForm sử dụng ViewState để quản lý, các trang ASP.net đều có lifecycle, postback và dùng các web controls, các event để thực hiện các hành động cho UI (User Interface) khi có sự tương tác với người dùng nên hầu hết ASP.net WebForm xử lý chậm.

- ASP.net MVC chia ra làm 3 phần: Models, View, Controller. Mọi tương tác của người dùng với Views sẽ được thực hiện hành động trong Controllers, không còn postback, lifecycel và events.

- Việc kiểm tra (test), gỡ lỗi (debug) với ASP.net WebForm đều phải chạy tất cả các tiến trình của ASP.net, và sự thay đổi ID của bất kỳ Controls nào cũng ảnh hưởng đến ứng dụng. Đối với MVC thì việc đó có thể sử dụng các unit test có thể thẩm định rất dễ dàng các Controllers thực hiện như thế nào.

- Sau đây là bảng so sánh các tính năng của ASP.net WebForm với ASP.net MVC

Các tính năng ASP.net WebForm ASP.net MVC
Kiến trúc chương trình Kiến trúc mô hình WebForm –> Bussiness –> Database Kiến trúc sử dụng việc phân chia chương trình thành: Models, Views, Controllers
Cú pháp chương trình Sử dụng cú pháp của WebForm, tất cả các sự kiện và controls do server quản lý Các sự kiện được điều khiển bởi controllers, các controls không do server quản lý.
Truy cập dữ liệu Sử dụng hầu hết các công nghệ truy cập dữ liệu trong ứng dụng Phần lớn dùng LINQ và SQL class để tạo mô hình truy cập đối tượng.
Debug Debug phải thực hiện tất cả bao gồm các lớp truy cập dữ liệu, sự hiển thị, điều khiển các controls. Debug có thể sử dụng các unit test để kiểm tra các phương thức trong controllers.
Tốc độ phân tải Tốc độ phân tải chậm khi trong trang có quá nhiều các controls vì ViewState quá lớn Phân tải nhanh hơn do không phải quản lý ViewState để quản lý các controls trong trang.
Tương tác với JavaScript Tương tác với JavaScript khó khăn vì các controls được điều khiển bởi server Tương tác với JavaScript dễ dàng vì các đối tượng không do server quản lý điều khiển không khó
URL address Cấu trúc địa chỉ URL có dạng:
.aspx?& Cấu trúc địa chỉ rành mạch theo dạng Controllers/Action/ID
Click vào đây để download một số tài liệu tham khảo ASP.net MVC

Tài Liệu Tự Học ASP.NET MVC 3

Bộ video này được Pluralsight hoàng thành vào 29/05/2011
  1. Introduction to ASP.NET MVC 3 - 35 mins
  2. Controllers in ASP.NET MVC 3 - 35 mins
  3. Razor Views in ASP.NET MVC 3 - 45 mins
  4. Working with Data in ASP.NET MVC 3 (Part I) - 39 mins
  5. Working with Data in ASP.NET MVC 3 (Part II) - 33 mins
  6. AJAX and JavaScript with ASP.NET MVC 3 - 47 mins
  7. Security and ASP.NET MVC 3 - 43 mins
  8. ASP.NET Infrastructure for ASP.NET MVC 3 - 34 mins
  9. TDD and Unit Testing with ASP.NET MVC 3 - 37 mins
  10. Configuration and Deployment with ASP.NET MVC 3 - 37 mins
Các bạn có thể xem online bằng các link trên hoặc down trọn bộ video tại:
ASP.NET MVC 3 Tutorial.iso.001 http://www.mediafire.com/?mje81mlzzxp4x72
ASP.NET MVC 3 Tutorial.iso.002 http://www.mediafire.com/?bofrphirzmfa75p
ASP.NET MVC 3 Tutorial.iso.003 http://www.mediafire.com/?07daf2y26zlz8u3
ASP.NET MVC 3 Tutorial.iso.004 http://www.mediafire.com/?qn26t5fmj3t8i3t

Upload Image Trong ASP.NET MVC

Những ai đã quen dùng ASP.NET để upload ảnh thì sẽ cảm thấy rất dễ chịu với control .NET FileUpload. Nhưng khi mới bắt đầu học ASP.NET MVC, điều đơn giản này lại trở thành khá phức tạp. Bài viết sau đây sẽ hướng dẫn các bạn Upload Image lên server trong ASP.NET MVC

Giao diện chính của chương trình như sau:


Bước 1: Tạo 1 controller sử dụng để tải ảnh lên và hiển thị các ảnh được tải

//Mới đầu vào trang
public ActionResult UploadImage()
{
ViewData["Message"] = "Please choose a image to Upload";
const string folderThumbPath = "/Content/Images/";
var directoryThumbs = new DirectoryInfo(Server.MapPath(folderThumbPath));
var listImages = directoryThumbs.GetFiles().Select(file => file.Name).ToList();
ViewData["listImages"] = listImages;
return View("/Views/Home/UploadImage.aspx");
}


Bước 2: Tạo 1 Controller để thực hiện save ảnh

//khi ấn save
[HttpPost]
public ActionResult UploadImage(string str)
{
if (ModelState.IsValid)
{
if (Request.Files != null)
{
var posted = Request.Files["uploadFile"];
if (posted.FileName != "" && posted.ContentLength<=512000)//500kb { const string pathStoredImage = "/Content/Images/"; var imageName = Path.GetFileName(posted.FileName); var filePath = pathStoredImage + imageName; posted.SaveAs(Server.MapPath(filePath)); } } } return RedirectToAction("UploadImage"); }


Bước 3: Tạo view để hiển thị

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<%@ Import Namespace="System.IO" %>


Upload Image


<%
var listPictureName = (IList)ViewData["listImages"];%>



<%=ViewData["message"] %>








<%
System.IO.DirectoryInfo dr = new DirectoryInfo(Server.MapPath("~/Content/Images"));
FileInfo[] f = dr.GetFiles();
if (listPictureName != null)
{
foreach (FileInfo item in f)
{%>
" width="100px" height="100px"/>
<%}
}%>






Dowload Project

Chúc các bạn thành công!