2012-01-22 38 views
9

Có thể truy cập các thuộc tính không được xác định trong điều khiển người dùng không? Tôi muốn thêm bất kỳ thuộc tính html nào mà không định nghĩa nó trong codebehind.Thuộc tính UserControl asp.net

ví dụ:

<my:TextBox runat="server" extraproperty="extravalue" /> 

nơi extraporperty không quy định tại điều khiển người dùng, nhưng vẫn tạo ra:

<input type="text" extraproperty="extravalue" /> 

tôi cần điều này trong điều khiển người dùng tùy chỉnh. Thông báo cho tôi: trước hộp văn bản.

ty!

+0

Ảnh .ascx của bạn trông như thế nào? –

Trả lời

7

Có thể. Hãy thử nó!

Ví dụ,

<asp:TextBox ID="MyTextBox" runat="server" extraproperty="extravalue" /> 

ám như:

<input name="...$MyTextBox" type="text" id="..._MyTextBox" extraproperty="extravalue" /> 

Sửa

Từ nhận xét:

asp: textbox không phải là một điều khiển người dùng tùy chỉnh

trên sẽ làm việc cho một điều khiển máy chủ tùy chỉnh (có nguồn gốc từ WebControl), nhưng không phải cho một UserControl, bởi vì một usercontrol không có thẻ mà trên đó các thuộc tính có thể được đặt: nó chỉ làm cho nội dung của nó.

Vì vậy, bạn sẽ cần mã trong lớp UserControl để thêm thuộc tính tùy chỉnh của bạn vào một trong các điều khiển con của nó. Sau đó, UserControl có thể hiển thị thuộc tính tùy chỉnh dưới dạng thuộc tính, chẳng hạn như:

// Inside the UserControl 
public string ExtraProperty 
{ 
    get { return myTextBox.Attributes["extraproperty"]; } 
    set { myTextBox.Attributes["extraproperty"] = value; } 
} 

// Consumers of the UserControl 
<my:CustomUserControl ... ExtraProperty="extravalue" /> 
+2

asp: textbox không phải là một điều khiển người dùng tùy chỉnh – LZW

+0

LZW vì vậy những gì? ________ – Evgeny

4

Bạn thực sự không phải khai báo các thuộc tính để sử dụng chúng làm thuộc tính. Hãy ví dụ rất đơn giản này:

<%@ Page Language="C#" CodeFile="Default.aspx.cs" Inherits="_Default" %> 
<%@ Register TagPrefix="uc" TagName="Test" Src="~/UserControls/Test.ascx" %> 

<uc:Test runat="server" extraproperty="extravalue" /> 

Bên trong tập tin mã điều khiển người dùng của bạn, bạn có thể nhận được giá trị từ bất cứ tài sản như thế này:

protected void Page_Load(object sender, EventArgs e) 
{ 
    string p = Attributes["extraproperty"]; 
} 

Như bạn có thể thấy, tất cả thuộc tính được đưa vào sử dụng của bạn kiểm soát có thể được đọc qua bộ sưu tập Attributes bằng cách sử dụng tên của các thuộc tính làm khóa để lấy giá trị từ bộ sưu tập.

0

Có, hãy xem giao diện IAttributeAccessor. đối tượng ASP.NET UserControl thực hiện rõ ràng giao diện này. Điều này cho phép bất kỳ thuộc tính nào được thêm trực tiếp vào điều khiển trong đánh dấu sẽ được chuyển đến bộ sưu tập thuộc tính phía máy chủ.

Lưu ý rằng việc triển khai mặc định trên UserControl không thể ghi đè nhưng viết và đọc từ bộ sưu tập thuộc tính nội bộ của nó.Để làm cho những thuộc tính này sang HTML trong điều khiển người dùng của bạn, làm một cái gì đó như thế này trong đánh dấu:

<div runat="server" ID="pnlOutermostDiv"> 
// control markup goes here 
</div> 

sau đó trong code-behind của điều khiển người dùng làm điều gì đó như thế này:

protected override void OnPreRender(EventArgs e) 
{ 
    foreach (string key in Attributes.Keys) 
    { 
     pnlOutermostDiv.Attributes.Add(key, Attributes[key]); 
    } 

    base.OnPreRender(e); 
} 

Bây giờ khi bạn sử dụng sự kiểm soát như thế này:

<my:TextBox runat="server" extraproperty="extravalue" /> 

Nó sẽ làm như thế này:

<div id="ctl00_blablabla_blablabla" extraproperty="extravalue"> 
// rendered control HTML here 
</div> 
Các vấn đề liên quan