Visual Studio 2008 là một phiên bản của Visual Studio cùng với .Net Framework 3.5 đã được MSDN giới thiệu vào 19.11.2007. Bài viết này sẽ giới thiệu với bạn những thay đổi nổi bật của Visual Studio 2008Visual Studio 2008 hướng tới sự phát triển .Net Framework phiên bản 2.0 , 3.0 và 3.5. Visual Studio 2008 có rất nhiều điểm đặc biệt hơn Visual Studio 2005. Visual Studio 2008 đưa ra một tính năng đặc biệt là XAML trình thiết kế căn bản , Linq to Sql (dùng để mô tả các kiểu ánh xạ và sự đóng gọi của đối tượng cho dữ liệu của SQL server), Trình gỡ lỗi XSLT , hỗ trợ soạn thảo và gỡ lỗi JavaScript. Dưới đây là danh sách một số đặc điểm khác biệt đặc trưng của Visual Studio 2008
- Hỗ trỡ đa tiêu chí.
- Soạn thảo Javascript
- Gỡ lỗi Javascript
- Cai tiến việc viết code
- Hỗ trợ lồng các trang Master page
- Trình thiết kế web và cải thiện trong CSS
- Chia cửa sổ soạn thảo thành nhiều phần hơn với các tính năng khác nhau có thể nhìn nhiều phần chia theo chiều dọc.
- Tăng sự hộ trợ cho ASP.NET AJAX Extensions
- Trình thiết kể LINQ to SQL
- Tăng hỗ trợ XML
- Hỗ trợ Silverlight
- Hỗ trợ WPF
- Hỗ trợ cho trình gỡ lỗi .Net Framework 3.5 các lớp thư viện.
Các bạn có thể tìm hiểu chi tiết hơn về Visual Studio 2008 tại các nguồn sau:
Video:
Blogs/WhitePapers
Today we will be featuring calendar date pickers to let you output planners, calendars even more easier, most of these date pickers are built on jQuery and jQuery UI (User Interface).
I would consider these date pickers as frameworks with great functionality, but most of them require modifying and some styling, but I think it’s really acceptable since each project needs it’s own design and you should change style of calendar plugin too. These plugins will help you and your visitors keep track what’s happening in specific project and help to organize time!

Khác...
Trước đây tui có hướng dẫn chèn thuộc tính target="_blank" cho các link trong bài viết để khi click vào link đó sẽ mở ra 1 tab mới trong trình duyệt. Như vậy người đọc sẽ không phải rời trang hiện thời để đọc trang mới. Tiếc là blog của tui hiện giờ đã không còn hoạt động, nên hôm nay tôi trình bày lại thủ thuật này kèm 1 chút cải tiến cho phép chèn cả thuộc tính rel="nofollow" cho các link ra trang ngoài, có domain khác domain của blog.
Đoạn code chèn vào blog khá đơn giản do tôi dùng jQuery để làm. Mở template của bạn lên, chèn đoạn code sau ngay trước thẻ </body>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
var domain = 'http://hontap.blogspot.com';
// Them target="_blank" cho tat ca cac link
$('a').attr('target', '_blank');
// Them rel="nofollow" cho cac link den trang web khac (khong cung domain)
$('a:not([href^=' + domain + '])').attr('rel', 'nofollow');
});
</script>
Các bạn chỉ cần sửa dòng khai báo domain trong đoạn code trên là được.
Đoạn code trên dùng javascript để chèn nofollow nên có thể sẽ không hiệu quả (trong việc kiểm soát PageRank) nếu các con bọ của các trình duyệt không đọc được javascript.
Khi lập trình có liên quan đến số liệu phải tính toán và yêu cầu phải đọc được số thành chữ như đọc tiền thành chữ. Bạn có thể dùng ngôn ngữ lập trình như C#, VB, hay php để thực hiện, Ở bài này mình sẽ viết hàm đọc số thành chữ bằng javascript
Khi bạn dùng javascript bạn sẽ hạn chế được việt dùng AutoPostback của trang. Và nếu chương trình có yêu cầu chỉ dùng các phím số và phím Enter để tính toán, khi nhập xong ở 1 ô con trỏ sẽ tự động sang ô kế tiếp và đọc tiền bằng chữ cho dữ liệu vừa nhập. Giải pháp tốt nhất là dùng Javascript.
Bài viết sau sẽ mô tả việc ứng dụng của hàm đọc số thành chữ trong javascript
Tương tự bạn hoàn toàn có thể sử dụng thuật toán này để đọc số bằng các ngôn ngữ lập trình khác nhau. Mình cũng đã viết hàm tương ứng bằng C#
Bạn thực hiện hàm như sau:
var ChuSo=new Array(" không "," một "," hai "," ba "," bốn "," năm "," sáu "," bảy "," tám "," chín ");
var Tien=new Array( "", " nghìn", " triệu", " tỷ", " nghìn tỷ", " triệu tỷ");
//1. Hàm đọc số có ba chữ số;
function DocSo3ChuSo(baso)
{
var tram;
var chuc;
var donvi;
var KetQua="";
tram=parseInt(baso/100);
chuc=parseInt((baso%100)/10);
donvi=baso%10;
if(tram==0 && chuc==0 && donvi==0) return "";
if(tram!=0)
{
KetQua += ChuSo[tram] + " trăm ";
if ((chuc == 0) && (donvi != 0)) KetQua += " linh ";
}
if ((chuc != 0) && (chuc != 1))
{
KetQua += ChuSo[chuc] + " mươi";
if ((chuc == 0) && (donvi != 0)) KetQua = KetQua + " linh ";
}
if (chuc == 1) KetQua += " mười ";
switch (donvi)
{
case 1:
if ((chuc != 0) && (chuc != 1))
{
KetQua += " mốt ";
}
else
{
KetQua += ChuSo[donvi];
}
break;
case 5:
if (chuc == 0)
{
KetQua += ChuSo[donvi];
}
else
{
KetQua += " lăm ";
}
break;
default:
if (donvi != 0)
{
KetQua += ChuSo[donvi];
}
break;
}
return KetQua;
}
//2. Hàm đọc số thành chữ (Sử dụng hàm đọc số có ba chữ số)
function DocTienBangChu(SoTien)
{
var lan=0;
var i=0;
var so=0;
var KetQua="";
var tmp="";
var ViTri = new Array();
if(SoTien<0) return "Số tiền âm !";
if(SoTien==0) return "Không đồng !";
if(SoTien>0)
{
so=SoTien;
}
else
{
so = -SoTien;
}
if (SoTien > 8999999999999999)
{
//SoTien = 0;
return "Số quá lớn!";
}
ViTri[5] = Math.floor(so / 1000000000000000);
if(isNaN(ViTri[5]))
ViTri[5] = "0";
so = so - parseFloat(ViTri[5].toString()) * 1000000000000000;
ViTri[4] = Math.floor(so / 1000000000000);
if(isNaN(ViTri[4]))
ViTri[4] = "0";
so = so - parseFloat(ViTri[4].toString()) * 1000000000000;
ViTri[3] = Math.floor(so / 1000000000);
if(isNaN(ViTri[3]))
ViTri[3] = "0";
so = so - parseFloat(ViTri[3].toString()) * 1000000000;
ViTri[2] = parseInt(so / 1000000);
if(isNaN(ViTri[2]))
ViTri[2] = "0";
ViTri[1] = parseInt((so % 1000000) / 1000);
if(isNaN(ViTri[1]))
ViTri[1] = "0";
ViTri[0] = parseInt(so % 1000);
if(isNaN(ViTri[0]))
ViTri[0] = "0";
if (ViTri[5] > 0)
{
lan = 5;
}
else if (ViTri[4] > 0)
{
lan = 4;
}
else if (ViTri[3] > 0)
{
lan = 3;
}
else if (ViTri[2] > 0)
{
lan = 2;
}
else if (ViTri[1] > 0)
{
lan = 1;
}
else
{
lan = 0;
}
for (i = lan; i >= 0; i--)
{
tmp = DocSo3ChuSo(ViTri[i]);
KetQua += tmp;
if (ViTri[i] > 0) KetQua += Tien[i];
if ((i > 0) && (tmp.length > 0)) KetQua += ',';//&& (!string.IsNullOrEmpty(tmp))
}
if (KetQua.substring(KetQua.length - 1) == ',')
{
KetQua = KetQua.substring(0, KetQua.length - 1);
}
KetQua = KetQua.substring(1,2).toUpperCase()+ KetQua.substring(2);
return KetQua;//.substring(0, 1);//.toUpperCase();// + KetQua.substring(1);
}