1.3. Code cho nút đăng nhập: public void ShowMessage(string mTextMsg, string mControlFocus) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); sb.Append(); if (mTextMsg = ) sb.Append( alert( + mTextMsg + );); if (mControlFocus = ) sb.Append(document.forms0.item( + mControlFocus + ).focus();); sb.Append(); if (IsStartupScriptRegistered(setFocus)) RegisterStartupScript(setFocus, sb.ToString()); } protected void btnLoGin_Click(object sender, EventArgs e) { String strCon = Data Source= NGOCHTHVTCPC; Initial Catalog= CSLT3_CanBo; User ID=ngochthvtc; Password=ngochvtc; SqlConnection con = new SqlConnection(); con.ConnectionString = strCon; con.Open(); SqlDataAdapter adt = new SqlDataAdapter(); SqlCommand cmd = new SqlCommand(); DataTable dt = new DataTable(); string strKtra = SELECT FROM Nguoi_Dung WHERE Ten_DN = N + txtTenDangNhap.Text.Trim() + AND Mat_Khau = + txtMatKhau.Text.Trim() + ; cmd.CommandText = strKtra; cmd.Connection = con; adt.SelectCommand = cmd; adt.Fill(dt); if (dt.Rows.Count > 0) { ShowMessage(Đăng nhập thành công,”Thông báo”); Response.Redirect(DSSV.aspx); } else { ShowMessage(Đăng nhập không thành công, “Thông báo”); } con.close(); } 2. Phần hiển thị lên gridview, sửa xóa trực tiếp trên gridview: 2.1. Tạo mới form DSSV.aspx 2.1.1. Code cho GridviewSV trang DSSV.aspx
1 Phần đăng nhập 1.1 Giao diện form 1.2 Thêm using cho phần code đăng nhập: dangnhap.aspx.cs Using System.Data; Using System.Data.SqlClient; 1.3 Code cho nút đăng nhập: public void ShowMessage(string mTextMsg, string mControlFocus) { System.Text.StringBuilder sb = new System.Text.StringBuilder(""); sb.Append(""); if (mTextMsg != "") sb.Append(" alert('" + mTextMsg + "');"); if (mControlFocus != "") sb.Append("document.forms[0].item('" + mControlFocus + "').focus();"); sb.Append(""); if (!IsStartupScriptRegistered("setFocus")) RegisterStartupScript("setFocus", sb.ToString()); } protected void btnLoGin_Click(object sender, EventArgs e) { String strCon = @"Data Source= NGOCHTHVTC-PC; Initial Catalog= CSLT3_CanBo; User ID=ngochthvtc; Password=ngochvtc"; SqlConnection = new SqlConnection(); con.ConnectionString = strCon; con.Open(); SqlDataAdapter adt = new SqlDataAdapter(); SqlCommand cmd = new SqlCommand(); DataTable dt = new DataTable(); string strKtra = "SELECT * FROM Nguoi_Dung WHERE Ten_DN = N'" + txtTenDangNhap.Text.Trim() + "' AND Mat_Khau = '" + txtMatKhau.Text.Trim() + "'"; cmd.CommandText = strKtra; cmd.Connection = con; adt.SelectCommand = cmd; adt.Fill(dt); if (dt.Rows.Count > 0) { ShowMessage("Đăng nhập thành công",”Thông báo”); Response.Redirect("DSSV.aspx"); } else { ShowMessage("Đăng nhập không thành công", “Thông báo”); } con.close(); } Phần hiển thị lên gridview, sửa xóa trực tiếp gridview: 2.1 Tạo form DSSV.aspx 2.1.1 Code cho GridviewSV trang DSSV.aspx đưa cột ……… - Hoặc: Chú ý: đề yêu cầu có thêm nút sửa xóa trực tiếp làm sau: đưa cột ……… 2.2 Viết kiện cho form DSSV.aspx.cs 2.2.1 Thêm hàm using: Using System.Data; Using System.Data.SqlClient; 2.2.2 Code cho kiện page_Load: private void DSSV() { String connStr; String strSQL; SqlConnection con; SqlCommand cmd; SqlDataAdapter adt; DataTable dt = new DataTable(); //Mở kết nối connStr = @"Data Source=NGOCHTHVTC-PC;Initial Catalog=QLSV_K48;User ID=PQ3; Password = 123"; = new SqlConnection(connStr); con.Open(); //Câu lệnh SQL strSQL = "Select Ma_SV, Ten_SV, Gioi_Tinh, Dtb From Sinh_Vien"; //Lấy Dữ liệu cmd = new SqlCommand(strSQL, con); adt = new SqlDataAdapter(); adt.SelectCommand = cmd; adt.Fill(dt); GridView1.DataSource = dt; GridView1.DataBind(); con.Close(); } protected void Page_Load(object sender, EventArgs e) { DSSV(); } 2.2.3 Code cho thao tác xóa: (sự kiện RowDeleting) protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) { string ma_SV = GridView1.DataKeys[e.RowIndex].Value.ToString(); String connStr; String strSQL; SqlConnection con; SqlCommand cmd; connStr = @"Data Source=NGOCHTHVTC-PC;Initial Catalog=QLSV_K48;User ID=PQ3; Password = 123"; connection = new SqlConnection(connStr); connection.Open(); // Câu lệnh SQL: Insert/Update/Delete strSQL = "Delete From Sinh_Vien Where Ma_SV = N'" + ma_SV.ToString() + "'"; cmd = new SqlCommand(strSQL, con); cmd.ExecuteNonQuery(); con.Close(); DSSV(); } 2.2.4 Code cho thao tác sửa: a Sự kiện RowEditing cho phép sửa: protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) { GridView1.EditIndex = e.NewEditIndex; DSSV(); } b Sự kiện RowCancelingEdit để hủy bỏ việc sửa protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) { GridView1.EditIndex = -1; DSSV(); } c Sự kiện RowUpdating để cập nhật protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) { string ma_SV = ((TextBox)GridView1.Rows[e.RowIndex].Cells[0].Controls[0]).Text; string ten_SV = ((TextBox) GridView1.Rows[e.RowIndex].Cells[1].Controls[0]).Text; string gioi_Tinh = ((TextBox)GridView1.Rows[e.RowIndex].Cells[2].Controls[0]).Text; decimal dtb = Convert.ToDecimal(((TextBox)GridView1.Rows[e.RowIndex].Cells[3].Controls[0 ]).Text); String connStr; String strSQL; SqlConnection con; SqlCommand cmd; connStr = @"Data Source=NGOCHTHVTC-PC;Initial Catalog=QLSV_K48;User ID=PQ3; Password = 123"; connection = new SqlConnection(connStr); connection.Open(); strSQL = "Update Sinh_Vien Set Ten_SV = N'" + ten_SV + "', Gioi_Tinh = N'" + gioi_Tinh + "', Dtb = " + dtb + " WHERE Ma_SV = N'" + ma_SV.Trim() + "'"; cmd = new SqlCommand(strSQL, con); cmd.ExecuteNonQuery(); con.Close(); //gvSinhVien.EditIndex = -1: Cho phép bấm Update thoát khỏi tình trạng Edit GridView1.EditIndex = -1; DSSV(); } Phần thêm có kiểm tra trùng mã 3.1 Thêm form ThemSV.aspx 3.1.1 Giao diện form UPLOAD 3.1.2 Code cho giao diện cho phần nhập ThemSV.aspx 0) { ShowMessage("Mã Sinh viên tồn tại",”Thông báo”); txtMa_SV.Text = “”; txtMa_SV.Focus(); Return; } else Câu 2: Sử dụng HTML Javascript để tạo chương trình máy tính: Bài var x, y; x = parseFloat(document.getElementById("so1").value); y = parseFloat(document.getElementById("so2").value); function Cong() { document.getElementById("kq").value = x + y; } function Tru() { document.getElementById("kq").value = x - y; } function Nhan() { document.getElementById("kq").value = x * y; } function Chia() { document.getElementById("kq").value = x / y; } function Mu() { document.getElementById("kq").value =math.pow( x,y); } Cộng Trừ Nhân Chia Mũ = Câu 3: Btập ASP.NET ** Vẽ form: ** Source kèm với ràng buộc liệu cho thuộc tính cần thiết (chỉ cần thiết lập ràng buộc Require FieldValidator RangeValidator cho thuộc tính mà có grid mà đề cho, thiết lập ràng buộc RangeValidator cho thuộc tính cần thiết khác số lượng, đơn giá, tiền, ) Sách Ngày Mã sách Mã NXB Tên sách Mô tả Đơn vị tính Đơn giá Số lượng Danh sách Sách ** Code: // Hàm load Grig view private void load_grvsach() { Text="Thêm" SqlConnection = new SqlConnection ("server=HVTC_server\\SQLEXPRESS; database=QLBH "); SqlDataAdapter adp = new SqlDataAdapter("select masach,tensach,dongia,ngaycapnhat from tblSach order by masach", con); DataSet ds = new DataSet(); adp.Fill(ds, "tblSach"); grvsach.DataSource = ds; grvsach.DataBind(); } //hàm Page Load protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { load_grvsach(); Page.DataBind(); } } //Code btn_them kèm theo việc kiểm tra mã sách có trùng không protected void btn_them_Click(object sender, EventArgs e) { SqlConnection = new SqlConnection ("server=HVTC_server\\SQLEXPRESS; database=QLBH;"); //Trước tiên kiểm tra xem có mã sách hay chưa Nếu tồn mã sách phải nhập lại SqlDataAdapter adp = new SqlDataAdapter("select * from tblSach where masach=’ “ + txt_masach + “ ‘ ", con); DataSet ds = new DataSet(); adp.Fill(ds, "tblSach"); DataTable dt = new DataTable(); dt = ds.Tables[0]; if (dt.Rows.Count > 0) { ShowMessage(" mã sách tồn tại", "thông báo"); txtmasach.Text = ""; txtmasach.Focus(); } Else //Nếu chưa có mã sách cho phép thêm vào { con.Open(); string ADD = "insert into tblSach(masach,tensach,dongia,ngaycapnhat) values('" + txt_masach.Text + "',N'" + txt_tensach + "','" + txt_dgia.Text + "'," + txt_ngay.Text + ")"; SqlCommand cmd = new SqlCommand(); cmd.Connection = con; cmd.CommandText = ADD; cmd.ExecuteNonQuery(); con.Close(); //Reset form txt_masach.Text = ""; txt_tensach.Text = ""; txt_dgia.Text = ""; txt_dvt.Text = ""; txt_mota.Text = ""; txt_manxb.Text = ""; txt_slg.Text = ""; txt_ngay.Text = ""; //Phải load lại grid để hiển thị sách vừa thêm load_grvsach(); } } Khi có khóa ngoại Trang quản trị a Code giao diện #form1 { height: 291px; } b Code chương trình using using using using using System; System.Collections.Generic; System.Linq; System.Web; System.Web.UI; using System.Web.UI.WebControls; using System.Data; using System.Data.SqlClient; namespace QLVatTuHangHoa { public partial class DSVatTu : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { ListUsers(); } private void ListUsers() { String connStr; String strSQL; SqlConnection myConnection; SqlDataAdapter myAdapter; DataTable myTable = new DataTable(); //Mở kết nối connStr = "Data Source=HAILEE; Initial Catalog=KTVT; Integrated Security=True"; myConnection = new SqlConnection(connStr); myConnection.Open(); //Câu lệnh SQL strSQL = "Select * From dmVT"; //Lấy Dữ liệu myAdapter = new SqlDataAdapter(strSQL, myConnection); myAdapter.Fill(myTable); myConnection.Close(); } grvDS.DataSource = myTable; grvDS.DataBind(); protected void grvDS_RowDeleting(object sender, GridViewDeleteEventArgs e) { int mavt = int.Parse(grvDS.DataKeys[e.RowIndex].Value.ToString()); String connStr; String strSQL; SqlConnection connection; SqlCommand cmd; connStr = "Data Source=HAILEE; Initial Catalog=KTVT; Integrated Security=True"; connection = new SqlConnection(connStr); connection.Open(); // Câu lệnh SQL: Insert/Update/Delete strSQL = "Delete From dmVT Where Mavt = " + mavt.ToString(); cmd = new SqlCommand(strSQL, connection); cmd.ExecuteNonQuery(); connection.Close(); //Nạp lại liệu ListUsers(); } protected void grvDS_RowEditing(object sender, GridViewEditEventArgs e) { grvDS.EditIndex = e.NewEditIndex; ListUsers(); } protected void grvDS_RowUpdating(object sender, GridViewUpdateEventArgs e) { int mavt = int.Parse(grvDS.DataKeys[e.RowIndex].Value.ToString()); //Cells[vitri]: Đây vị trí cột đánh số thứ tự – n //Controls[vitri]: Xét Cells xử lý control thứ đánh số từ – n, field có control nên đánh số String sTenvt = ((TextBox)grvDS.Rows[e.RowIndex].Cells[1].Controls[0]).Text; String sDvt = ((TextBox)grvDS.Rows[e.RowIndex].Cells[2].Controls[0]).Text; String sMaNCC = ((TextBox)grvDS.Rows[e.RowIndex].Cells[3].Controls[0]).Text; String sHinhanh = ((TextBox)grvDS.Rows[e.RowIndex].Cells[4].Controls[0]).Text; //Thực thi lệnh Sửa String connStr; String strSQL; SqlConnection connection; SqlCommand cmd; connStr = "Data Source=HAILEE; Initial Catalog=KTVT; Integrated Security=True"; connection = new SqlConnection(connStr); connection.Open(); strSQL = "Update [dmVT] Set Tenvt = N'" + sTenvt + "', Dvt = N'" + sDvt + "', MaNCC = '" + sMaNCC + "', Hinhanh= N'" + sHinhanh + "' Where Mavt = '" + mavt.ToString() + "'"; cmd = new SqlCommand(strSQL, connection); cmd.ExecuteNonQuery(); connection.Close(); // Thoát khỏi tình trạng Edit grvDS.EditIndex = -1; //Nạp lại liệu ListUsers(); } protected void grvDS_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) { grvDS.EditIndex = -1; ListUsers(); } protected void grvDS_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow && grvDS.EditIndex == -1) { ((LinkButton)e.Row.Cells[5].Controls[2]).OnClientClick = "return confirm('Bạn có muốn xóa vật tư không?');"; } } protected void grvDS_SelectedIndexChanging(object sender, GridViewSelectEventArgs e) { int mavt = int.Parse(grvDS.DataKeys[e.NewSelectedIndex].Value.ToString()); Response.Redirect("ChiTietVT.aspx?mavt=" + mavt.ToString()); } protected void btnThem_Click(object sender, EventArgs e) { Response.Redirect("ThemMoiVT.aspx"); } } } Thêm vật tư THÊM MỚI VẬT TƯ Mã VT: Tên VT: Đơn vị tính: Mã NCC Hình Ảnh asp:Button ID="btnThem" runat="server" Font-Bold="True" ForeColor="Blue" onclick="btnThem_Click" Text="Lưu" /> namespace QLVatTuHangHoa { public partial class ThemMoiVT : System.Web.UI.Page { public void ShowMessage(string mTextMsg, string mControlFocus) { System.Text.StringBuilder sb = new System.Text.StringBuilder(""); sb.Append(""); if (mTextMsg != "") sb.Append(" alert('" + mTextMsg + "');"); if (mControlFocus != "") sb.Append("document.forms[0].item('" + mControlFocus + "').focus();"); sb.Append(""); if (!IsStartupScriptRegistered("setFocus")) RegisterStartupScript("setFocus", sb.ToString()); } protected void Page_Load(object sender, EventArgs e) { String connStr; String strSQL; SqlConnection myConnection; SqlDataAdapter myAdapter; SqlCommand myCommand; DataTable myTable = new DataTable(); //Mở kết nối connStr = "Data Source=HAILEE; Initial Catalog=KTVT; Integrated Security=True"; myConnection = new SqlConnection(connStr); myConnection.Open(); //Câu lệnh SQL strSQL = "Select MaNCC, TenNCC From dmNCC"; //Lấy Dữ liệu myCommand = new SqlCommand(strSQL, myConnection); myAdapter = new SqlDataAdapter(); myAdapter.SelectCommand = myCommand; myAdapter.Fill(myTable); ddlMaNCC.DataSource = myTable; ddlMaNCC.DataValueField = "MaNCC"; ddlMaNCC.DataTextField = "TenNCC"; ddlMaNCC.DataBind(); } protected void btnThem_Click(object sender, EventArgs e) { if (txtMavt.Text.Trim() == "") { Response.Write("alert('Nhập vào mã vật tư';)"); txtMavt.Focus(); return; } string strCon = "Data Source=HAILEE; Initial Catalog=KTVT; Integrated Security=True"; SqlConnection = new SqlConnection(); con.ConnectionString = strCon; con.Open(); SqlDataAdapter adt = new SqlDataAdapter(); SqlCommand cmd = new SqlCommand(); DataTable dt = new DataTable(); string strKtra = "SELECT * From dmVT Where Mavt = '" + txtMavt.Text.Trim() + "'"; cmd.CommandText = strKtra; cmd.Connection = con; adt.SelectCommand = cmd; adt.Fill(dt); if (dt.Rows.Count > 0) { ShowMessage("Mã vật tư tồn tại","Thông Báo"); txtMavt.Text = ""; txtMavt.Focus(); return; } try { string sqlInsert = "insert into dmVT values ('" + txtMavt.Text.Trim() + "',N'" + txtTenvt.Text.Trim() + "',N'" + txtDvt.Text.Trim() + "',N'" + ddlMaNCC.SelectedValue.Trim() + "',N'"+txtHinh_Anh.Text.Trim()+"')"; SqlCommand sqlCom = new SqlCommand(sqlInsert, con); sqlCom.ExecuteNonQuery(); ShowMessage("Thêm Vật tư Thành Công", "Thông Báo"); Response.Redirect("QuanTriVT.aspx"); } catch (Exception ex) { ShowMessage("Lỗi:", "Erorr"); } finally { con.Close(); } 500000) } protected void btnUpLoad_Click(object sender, EventArgs e) { HttpPostedFile file = FileUpload1.PostedFile; if (FileUpload1.HasFile == false || file.ContentLength > { } else//Nếu file thỏa mãn { try { string strPath = Server.MapPath("~/HinhAnh/" + FileUpload1.FileName); FileUpload1.SaveAs(strPath); txtHinh_Anh.Text = "~/HinhAnh/" + FileUpload1.FileName.ToString(); } catch { } } } } } [...]... 1 ứng dụng ASP.Net sử dụng phong cách lập trình mới: Code behide Tách code và giao diện riêng biệt Quá trình xử lý trang ASP.NET: Về cơ bản một trang ASP.NET giống như một trang HTML Một trang ASP.NET có phần mở rộng aspx Nếu một trình duyệt yêu cầu một trang ASP.NET, máy chủ xử lý bất kỳ mã thực thi nào có trong trang trước khi kết quả được gửi trả lại cho trình duyệt Cụ thể: Một trang ASP.NET lưu... ASP chứa đoạn mã hóa mà các máy chủ Web thực hiện - Active: Một trang ASP cung cấp nội dung động mà được cập nhật mỗi lần trang được truy cập ASP.NET hỗ trợ ba mô hình phát triển khác nhau: Web Pages, MVC, Web Forms ASP.Net cho phép viết = ngôn ngữ Visual Basic.Net, J#, C#,… Trang ASP.Net được biên dịch trước -> Server có thể thi hành nhanh chóng và hiệu quả ASP.Net hỗ trợ mạnh mẽ bộ thư viện phong... sqlCom.ExecuteNonQuery(); ShowMessage( "đăng ki Thành Công", ""); Response.Redirect(dangnhap.aspx"); } catch (Exception ex) { ShowMessage("Lỗi:" + ex); } finally { con.Close(); } } Câu 1: Trình bày về ASP.NET? Quá trình xử lý trang ASP.NET? ASP.NET (Active Server Pages) là kỹ thuật lập trình và phát triển ứng dụng web ở phía Server (Server-side) dựa trên nền tảng của Microsoft Net Framework ASP.NET là một khung nền... Web và có chứa mã viết bằng một trong các ngôn ngữ NET Khi người dùng yêu cầu các trang ASP.NET, máy chủ web tải trang và thực hiện các chương trình liên kết với trang Các mã liên kết với trang có thể thực hiện rất nhiều thao tác, chẳng hạn như truy cập vào một cơ sở dữ liệu trên máy chủ, gọi đến dịch vụ Web, hoặc thực hiện các phép tính Cuối cùng, đoạn mã hiển thị đầu ra là HTML cho người sử dụng trong... trình duyệt, người dùng nhập trang www.server.com/abc.aspx Bước 2: Trình duyệt gửi yêu cầu tới server với nội dung: ”Làm ơn gửi cho tôi trang abc.aspx thì tốt !” Bước 3: Web server sẽ biên dịch code của trang aspx (bao gồm cả các mã code vb.net/ c# gọi là code behind hay code file) thành class Bước 4: Lớp sau khi được biên dịch sẽ được server thực thi Bước 5: Server trả kết quả thực thi về cho trình... Với txtma là text nhập mật khẩu, txtma2 là text nhắc lại mật khẩu 5 Thay đổi lệnh SQL: - Theo đề cũ (SV 46 dtb >7 và sv 47.41) SELECT Ma_SV, Ten_SV … FROM Sinh_Vien WHERE (LEFT(LTRIM(Lop),4) = ‘CQ46’ AND dtb > 7) OR (LEFT(LTRIM(Lop),7 = ‘CQ47/41’) - Lấy ra các sinh viên khoa tin học SELECT Ma_SV, Ten_SV … FROM Sinh_Vien WHERE SUBSTRING(LTRIM(6,2) = ‘41’ 6 Code cho sự kiện Click của nút đăng kí: protected... txtDtb có kiểu Số thực và thuộc khoảng cho trước 4.4 Kiểm tra txtten không được có kí tự đặc biệt: (4.4 và 4.5 trong trường hợp tạo form đăng kí người dùng)... Mũ = Câu 3: Btập ASP.NET ** Vẽ form: ** Source kèm với các ràng buộc dữ liệu cho các thuộc tính cần thiết (chỉ cần thiết lập ràng buộc Require FieldValidator và RangeValidator cho các thuộc tính mà có trong grid mà đề bài cho, ngoài ra thì thiết lập ràng buộc RangeValidator cho các thuộc tính cần thiết khác như số lượng,... 0 – n, ở đây trong mỗi field đều có 1 control nên đánh số là 0 String sTenvt = ((TextBox)grvDS.Rows[e.RowIndex].Cells[1].Controls[0]).Text; String sDvt = ((TextBox)grvDS.Rows[e.RowIndex].Cells[2].Controls[0]).Text; String sMaNCC = ((TextBox)grvDS.Rows[e.RowIndex].Cells[3].Controls[0]).Text; String sHinhanh = ((TextBox)grvDS.Rows[e.RowIndex].Cells[4].Controls[0]).Text; / /Thực thi lệnh Sửa String connStr;... txtGioi_Tinh.Text.Trim() + "',N'" + txtHinh_Anh.Text.Trim() + "',N'" + txtNgay_Sinh.Text.Trim() + "'," + txtDtb.Text + ")"; SqlCommand sqlCom = new SqlCommand(sqlInsert, con); sqlCom.ExecuteNonQuery(); ShowMessage("Thêm SV Thành Công", ""); Response.Redirect(DSSV.aspx"); } catch (Exception ex) { ShowMessage("Lỗi:" + ex); } finally { con.Close(); } } 4 Phần kiểm tra có sử dụng các điều khiển 4.1 Kiểm tra txtMasv không được ... adt.Fill(dt); if (dt.Rows.Count > 0) { ShowMessage( "Đăng nhập thành công",”Thông báo”); Response.Redirect("DSSV.aspx"); } else { ShowMessage( "Đăng nhập không thành công", “Thông báo”); } con.close(); }... biệt Quá trình xử lý trang ASP.NET: Về trang ASP.NET giống trang HTML Một trang ASP.NET có phần mở rộng aspx Nếu trình duyệt yêu cầu trang ASP.NET, máy chủ xử lý mã thực thi có trang trước kết... Basic.Net, J#, C#,… Trang ASP.Net biên dịch trước -> Server thi hành nhanh chóng hiệu ASP.Net hỗ trợ mạnh mẽ thư viện phong phú đa dạng Net Framework ASPX ASP hoạt động ứng dụng ASP.Net sử dụng phong