2009-05-04 44 views
13

Tôi có một UserControl với một vài thuộc tính boolean trong đó. Tôi muốn chúng được đặt thành true theo mặc định nếu không được đặt rõ ràng trong trang .aspx hoặc ít nhất buộc chúng được khai báo nếu không có cách nào để đặt mặc định. Tôi biết có một cách để làm điều này bởi vì rất nhiều điều khiển đã yêu cầu tài sản phá vỡ ứng dụng của bạn khi bạn cố gắng chạy nó và chúng không được khai báo.UserControl Giá trị mặc định trong thuộc tính

Làm cách nào để thực hiện việc này?

Ví dụ:

<je:myControl runat="server" id="myControl" showBox="False"> 

tôi muốn hệ thống hoặc là phá vỡ hoặc thiết lập mặc định để "true" nếu Showbox được gạt ra khỏi tuyên bố này.

Cảm ơn!

Trả lời

20

Xác định tài sản của bạn với các giá trị mặc định của họ như thế:

private bool _ShowBox = false; 
public bool ShowBox 
{ 
    set { _ShowBox = value; } 
} 

hoặc trong constructor của kiểm soát của bạn, giá trị mặc định thiết lập:

public MyControl() 
{ 
    _ShowBox = false; 
} 

hoặc ném ngoại lệ nếu nó không được chỉ định:

private bool _ShowBox = false; 
public bool ShowBox 
{ 
    set { _ShowBox = value; } 
    get { return _ShowBox; } 
} 
+0

cảm ơn bạn! điều này là hoàn hảo – Jason

+0

'if (_ShowBox == null) {' có thể đúng bởi vì bạn sẽ không thể đặt bool thành null. – Peter

+0

Cái gì? kiểm tra bool với null sẽ luôn trả về false !!!! – Yuki

2

Chỉ cần thiết lập giá trị mặc định mong muốn, khi khai báo một biến:

class myControl 
{ 
    private bool _showBox = true; 

    [PersistenceMode(PersistenceMode.Attribute), DefaultValue(false)] 
    public bool showBox 
    { 
     get { return _showBox; } 
     set { _showBox = value; } 
    } 
} 

Tùy chọn bạn có thể thêm DefaultValueAttribute cho nhà thiết kế.

24

Tôi biết tôi đã trễ nhưng tôi chỉ muốn đề cập đến điều đó

[DefaultValue(false)] 

sẽ KHÔNG đặt thuộc tính thành sai. Xem: http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx. Nó nói:

"Một DefaultValueAttribute sẽ không khiến thành viên được tự động khởi tạo với giá trị của thuộc tính. Bạn phải đặt giá trị ban đầu trong mã của bạn."

Thuộc tính này chỉ để cho biết trong Visual Studio Designer những gì bạn cho là giá trị mặc định. Nếu ai đó sử dụng điều khiển của bạn thay đổi giá trị này, nó sẽ được hiển thị đậm để báo hiệu rằng giá trị này không mặc định.

2

ReSharper khuyến cáo sử dụng một tính năng tự động tài sản, và thiết lập các giá trị mặc định trong các nhà xây dựng, như vậy:

public class MyControl 
{ 
    public MyControl() 
    { 
    ShowBox = true; 
    } 

    public bool ShowBox { get; set; } 
} 
Các vấn đề liên quan