Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 12 kết quả

Đề tài: Sử dụng User Control động trong trang ASP.NET

  1. #1
    Ngày gia nhập
    05 2007
    Bài viết
    55

    Mặc định Sử dụng User Control động trong trang ASP.NET

    http://my.opera.com/lovefinder/blog/...-trang-asp-net

    1 Nêu vấn đề Ý tưởng như sau:
    Tôi có 3 User Control (UC) là Menu, Welcome, Login và chỉ một trang default.aspx để xây dựng một ứng dụng web đơn giản.
    UC Menu sẽ chứa 2 link: Home, Login
    UC Welcome : Chứa nội dung chính của trang
    UC Login: Chứa form login
    Vậy làm thế nào để khi mới vào trang default.aspx chúng ta sẽ có một trang gồm menu và phần home. Khi nhấp vào link login, thì form login sẽ được thay thế cho phần home.

    2 Thiết kế
    * Có UC Login.ascx đơn giản như sau:

    * UC Menu.ascx như sau:

    HTML Code:
    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="Menu.ascx.cs" Inherits="Menu" ClassName="Menu" %> <table style="width:780px; text-align:center; background-color:#ffffdd;"> <tr><td width="50%"><a href="Default.aspx?mod=home">Home</a></td> <td><a href="Default.aspx?mod=Login">Login</a></td></tr> </table>
    Trang default.aspx sẽ được thiết kế như sau:

    HTML Code:
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <%@ Register Src="Menu.ascx" TagName="Menu" TagPrefix="uc1" %> <!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"> <title>User Control</title> </head> <body> <form id="form1" runat="server"> <div><h2>Chào mừng bạn đến với User Control trong ASP.NET Tutorial</h2> <br /> <div><uc1:Menu ID="Menu1" runat="server" /></div><br /> </div> <asp:PlaceHolder runat="server" ID="Body"></asp:PlaceHolder> </form> </body> </html>
    Hãy quan tâm đến đoạn code:
    HTML Code:
    <asp:PlaceHolder runat="server" ID="Body"></asp:PlaceHolder>
    Tôi sẽ nói với bạn nó hoạt động như thế nào sau khi ta xem code ở phần Page_Load của trang Default.aspx.cs :
    Visual C# Code:
    1. protected void Page_Load(object sender, EventArgs e)
    2.     {
    3.         //HttpContext context = new HttpContext();
    4.         string module = null;        
    5.         Control ct;        
    6.         if (!IsPostBack)
    7.         {
    8.             module = Request.QueryString["mod"].ToString().Trim();
    9.             HtmlGenericControl gel = new HtmlGenericControl("div");
    10.             if (module == "Login")
    11.             {                
    12.                 ct = Page.LoadControl("Login.ascx");            
    13.             }
    14.             else
    15.             {                
    16.                 ct = Page.LoadControl("Welcome.ascx");              
    17.             }
    18.             gel.Controls.Add(ct);
    19.             Body.Controls.Add(gel);        
    20.         }
    21.     }
    3 Giải thích hoạt động
    * Trong Page_Load() của trang default.aspx :
    - Khởi tạo một biến kiểu string là module nhằm mục đích lưu giữ tham số module mà người dùng request đến các trang.
    - Khai báo một biến kiểu Control là ct;
    - Câu lệnh:
    HTML Code:
    module = Request.QueryString["mod"].ToString().Trim();
    Nhằm mục đích lấy vào giá trị tham số “mod” được truyền thông qua địa chỉ url. Và vì là demo và mục đích là vận hành việc sử dụng control động nên tôi đã lược bỏ việc bắt và xử lý lỗi.
    - Dòng tiếp theo:
    HTML Code:
    HtmlGenericControl gel = new HtmlGenericControl("div");
    Khởi tạo một biến gel kiểu là HtmlGenericControl đưa vào tham số “div” nhằm mục đích khi ta add biến này vào trang nó sẽ tương ứng với việc ta khởi tạo một thẻ div trong trang html vậy.
    - Lệnh kiểm tra if … else … tiếp theo kiểm tra giá trị của biến module, từ đó sẽ load các UC nào tương ứng với request từ phía client.
    - 2 câu lệnh
    HTML Code:
    ct = Page.LoadControl("Login.ascx"); ct = Page.LoadControl("Welcome.ascx");
    sẽ có tác dụng load các UC tương ứng lên trang.
    - Lệnh
    gel.Controls.Add(ct);
    có chức năng đưa UC đã được load ở bước trước vào giữa thẻ .
    - Và cuối cùng:
    Body.Controls.Add(gel);
    Đây mới là bước để đưa các công đoạn mà ta đã làm lên trang. Như tôi đã lưu ý ở phía trên, ở đây Body chính là ID của PlaceHolder mà ta đã đặt trong mã Html của trang.
    Điều này có ý nghĩa gì?
    + Bất cứ khi nào bạn muốn đặt (muốn UC hiển thị) ở đâu, hãy để vào đó một PlaceHolder, đặt tên (ID) cho nó. Tiếp theo load UC lên và add vào trang. Nó sẽ hiển thị đúng chỗ đó.

    4 Hoạt động
    * Mở Browser và gõ vào địa chỉ trang để xem :
    http://localhost/UserControls/Default.aspx?mod=home
    Home.ascx được Load
    * Bấm vào Login:
    Login.ascx được Load
    * Kết luận:
    - Khi nhấn vào nút login, phần nội dung welcome đã được thay thế bởi bởi phần login. Nghĩa là các control đã được hiển thị đúng với yêu cầu từ phía client.

    5 Nhận xét và Mở rộng
    Lợi điểm của phương pháp sử dụng UC so với các trang aspx thông thường:
    + Khả năng reuse cao
    + Giảm tối đa việc viết các trang aspx. Việc liên kết trang sẽ được thay thế bằng việc gọi các module tương ứng.
    + Dễ sửa đổi code
    + Dễ phân quyền cho user, tùy theo quyền mà các US sẽ được nạp vào trang tương ứng.
    Mở rộng:
    - Bạn có thể dùng phương pháp này để xây dựng một ứng dụng như forum, bán hàng, hoặc lớn hơn là một portal chẳng hạn. Đặc điểm chung của các ứng dụng đó là chúng có rất nhiều module, nhiều chức năng khác nhau, và hiển thị theo quyền truy cập. Nếu viết theo các trang aspx thông thường. Bạn sẽ phải mất nhiều thời gian cho việc kéo thả, thậm chí là copy & paste cho các phần chung như header, footer, hay menu chính.
    - Thay vào đó bạn hãy thực hiện phân quyền, load các role tương ứng và các UC cũng lần lượt hiển thị cho các bạn với các chức năng tương ứng. Tất nhiên phương thức xử lý các UC cũng khác đi một chút so với demo. Nhưng ý tưởng chung là vậy.

    6 Tổng kết
    - Thực sự rất động, bạn hãy thử bắt tay vào thực hiện một lần để hiểu hơn nữa hiệu quả và giá trị của nó.

  2. #2
    Ngày gia nhập
    05 2007
    Bài viết
    55

    Lỗi gì đây mọi người?
    Đã được chỉnh sửa lần cuối bởi nampt : 01-08-2007 lúc 06:02 PM.

  3. #3
    Ngày gia nhập
    07 2007
    Bài viết
    16

    sao .aspx mà CodeFile lại .ascx.cs

  4. #4
    Ngày gia nhập
    08 2006
    Nơi ở
    tp HCM
    Bài viết
    26

    thanks nampt, bài viết khá hay.

    hi ImX.WiR!
    User Control có type là ascx

  5. #5
    Ngày gia nhập
    07 2007
    Bài viết
    16


    tất nhiên là mình biết. đang nói cái lỗi của bạn nampt mà .
    bạn ý tạo file Default.aspx mà CodeFile từ 1 UC

  6. #6
    Ngày gia nhập
    10 2007
    Bài viết
    10

    Mặc định Sử dụng User Control động trong trang ASP.NET

    sai cái defaut.aspx và cái menu.ascx kìa, sửa lại đúng là ngon lành!

  7. #7
    Ngày gia nhập
    03 2009
    Bài viết
    1

    xin chào bạn nampt tôi đã áp dụng đoạn mã của bạn để gọi các control như sau;
    (file main.aspx và các control nhap.ascx, sua.ascx ,dsmonhoc.ascx)
    Trong dsmonhoc tôi có 1 control gridview để hiển thị toàn bộ môn học.
    trong main.aspx toi dùng PlaceHolder (ID=Plcapnhat)với đoạn mã lệnh viết trong main.aspx.cs như sau:


    protected void Page_Load(object sender, EventArgs e)
    {
    this.Plcapnhat.Controls.Clear();


    if (!IsPostBack)
    {

    module = Request.QueryString["sdh"].ToString().Trim();
    if (module == "sdhsua")
    {
    ct = Page.LoadControl("~/Control/Sua.ascx");
    }
    if (module == "sdhnhap")
    {
    ct = Page.LoadControl("~/Control/Nhap.ascx");
    }
    if (module=="ds" )
    {
    ct = Page.LoadControl("~/Control/dsMonHoc.ascx");

    }


    this.Plcapnhat.Controls.Add(ct);
    }



    }
    trong gridview của dsmonhoc tôi phân trang và có các cột edit và update,delete .
    Khi click vào các trang 2,3.. của gridview và delete thì thông tin trên dsmonhoc.ascx không thấy hiển thị và khi vào lại thấy chưa xóa được.Tôi mới học nên chưa biết lỗi ở đâu xin bạn sửa giúp để hiển thị được thông tin ở các trang sau và xóa được dữ liệu

  8. #8
    Ngày gia nhập
    05 2010
    Bài viết
    76

    không biết có còn ai chú ý topic này nữa không nhưng không thấy ai giải đáp, hôm nay đúng lúc đụng đến vấn đề này mò mãi cũng xong .

    khi sử dụng usercontrol động thì khó bind lại các dữ liệu vì nó chỉ load usercontrol mà ko load page vì vậy ở trong page_load của usercontrol bạn thêm vào EnableViewState = false;

  9. #9
    Ngày gia nhập
    12 2008
    Bài viết
    2

    Bỏ dòng !IsPostBack
    Code:
    if (!IsPostBack)
    {
     
    }
    Control ctrl = Page.LoadControl("UserControl.ascx");
    placeHolderMain.Controls.Add(ctrl);
    Nếu có dòng đó thì khi click các server control như LinkButton, Button gì đó thì UserControl kia sẽ biến mất(không được load)

  10. #10
    Ngày gia nhập
    03 2009
    Bài viết
    66

    Mình có 2 trang index.aspx vào Test.ascx
    Trong Test.ascx mình có hàm


    string ten;
    public string Ten
    {
    get
    {
    return ten;
    }
    set
    {
    ten= value;
    }
    }

    thì sao khi load Test.ascx này vào trang index.aspx .Trong trang index.aspx mình muốn gọi hàm Ten được gán giá trị cho "ten" thì phải làm sao ?

Các đề tài tương tự

  1. Graphic Xuất một user control lên form từ 1 user control
    Gửi bởi gialack35 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 23-03-2013, 04:31 PM
  2. click metroTileItem của user control để hiển thị form chính. (user control ở dạng slide)
    Gửi bởi dagulink trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 25-11-2012, 12:08 AM
  3. Thả user control vào làm trang bị thay đổi bố cục là do đâu?
    Gửi bởi HINCUTIN trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 9
    Bài viết cuối: 24-10-2012, 11:40 AM
  4. Cách tạo user custom control cho trang đăng nhập
    Gửi bởi cuibap_sp trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 7
    Bài viết cuối: 01-12-2011, 01:28 AM
  5. Gọi hàm của user control trong lập trình C#?
    Gửi bởi haingo08tlt trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 7
    Bài viết cuối: 02-03-2011, 07:12 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn