TOC

This article is currently in the process of being translated into Vietnamese (~93% done).

UserControls:

Using a UserControl

Trong chương trước chúng ta đã tạo ra UserControl và chúng ta thử dùng nó lần đầu. Lấy một page trong project hay chỉ đơn giản tạo ra một page mới. Chúng ta khai báo UserControl. Chúng ta có thể khai báo trong mỗi page dùng nó hay trong web.config. Không có sự khác biệt về hiệu suất nhưng khi khai báo UserControl trong web.config, control phải có đặt trong directory khác với các page dùng nó.

Hãy khai báo trong page. Thêm dòng sau vào sau phần khai báo page chuẩn:

<%@ Register TagPrefix="My" TagName="UserInfoBoxControl" Src="~/UserInfoBoxControl.ascx" %>

Đảm bảo rằng src đúng với đường dẫn trong UserControl. Bây giờ bạn có thể dùng UserControl trong page như các control khác. Ví dụ:

<My:UserInfoBoxControl runat="server" ID="MyUserInfoBoxControl" />

Nếu bạn nhìn page thì bạn sẽ thấy UserControl mặc dù thông tin hơi giới hạn. Chúng ta sẽ phải thiết lập giá trị cho thuộc tính chúng ta định nghĩa. Rất dễ dàng:

<My:UserInfoBoxControl runat="server" ID="MyUserInfoBoxControl" UserName="John Doe" UserAge="45" UserCountry="Australia" />

Bạn thấy đó, mọi thành phần public hay protected có thể truy nhập, cho phép dễ dàng truy nhập vào chúng khi chúng ta dùng control. Tuy nhiện với UserControl, bạn có thể nhận thông tìn từ nguồn ngoài, như cơ sở dữ liệu và sau đó dùng. Nó thường có trong CodeBehind, nên chúng ta có thể làm điều đó không? Khá đơn giản. Trong CodeBehind thì có thể làm như sau:

protected void Page_Load(object sender, EventArgs e)
{
    // These values can come from anywhere, but right now, we just hardcode them
    MyUserInfoBoxControl.UserName = "Jane Doe";
    MyUserInfoBoxControl.UserAge = 33;
    MyUserInfoBoxControl.UserCountry = "Germany";
}

Loading dynamically

Đôi lúc bạn có thể thêm UserControl vào trong trang động thay vì khai báo. Rất đơn giản làm vậy. Bạn cần control đang có để thêm vào như một Panel chẳng hạn. Nếu không có control thì bạn có thể dùng PlaceHolder.

On your page, define it like this:

<asp:PlaceHolder runat="server" ID="phUserInfoBox" />

In the CodeBehind of the page, we add the control like this:

phUserInfoBox.Controls.Add(LoadControl("~/UserInfoBoxControl.ascx"));

Khi dùng LoadControl để tạo UserControl rất đơn giản nhưng là dạng nặc danh - vì chúng ta chỉ dùng LoadControl mà không dùng thuộc tính của nó. Phải để ý. Trong page thì chúng ta thêm khai báo sau trên đầu:

<%@ Reference Control="~/UserInfoBoxControl.ascx" %>

Bây giờ bạn có thể truy nhập vào UserInfoBoxControl giống class thông thường, có nghĩa chúng ta có thể chuyển kiểu. Trong ví dụ tiếp theo, chúng ta thiết lập thuộc tính và sau đó đưa vào PlaceHolder:

UserInfoBoxControl userInfoBoxControl = (UserInfoBoxControl)LoadControl("~/UserInfoBoxControl.ascx");
userInfoBoxControl.UserName = "John Doe";
userInfoBoxControl.UserAge = 78;
userInfoBoxControl.UserCountry = "Spain";
phUserInfoBox.Controls.Add(userInfoBoxControl);

Điều này hữu ích ví dụ bạn có thể thêm nhiều instance cùng UserControl vào một page vì bạn có thể dùng vòng lặp.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!