2009-05-04 11 views
13

Posiadam UserControl z kilkoma właściwościami typu boolean. Chciałbym, aby były ustawione domyślnie na true, jeśli nie zostały jawnie ustawione na stronie .aspx lub przynajmniej wymuszą ich deklarację, jeśli nie ma możliwości ustawienia wartości domyślnej. Wiem, że jest na to sposób, ponieważ wiele kontrolek ma wymagane właściwości, które łamią twoją aplikację, gdy próbujesz ją uruchomić i nie są zadeklarowane.Wartość domyślna UserControl w usłudze

Jak to zrobić?

Przykład:

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

Chcę system albo złamać lub ustawienie domyślne na „true”, jeśli Showbox pozostało z tej deklaracji.

Dzięki!

Odpowiedz

20

Określ swoje właściwości z ich wartościami domyślnymi tak:

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

lub konstruktora kontrolą, w ustalonych wartości domyślnych:

public MyControl() 
{ 
    _ShowBox = false; 
} 

lub wyjątek throw jeśli nie jest przypisana:

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

dziękuję! to jest idealne – Jason

+0

'if (_ShowBox == null) {' może być prawdziwe, ponieważ nie można ustawić wartości bool na wartość null. – Peter

+0

Co? sprawdzanie wartości bool z wartością null zawsze zwróci false !! – Yuki

2

Wystarczy ustawić żądaną wartość domyślną, podczas deklarowania zmiennej:

class myControl 
{ 
    private bool _showBox = true; 

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

Opcjonalnie można dodać DefaultValueAttribute dla projektanta.

24

Wiem, że się spóźniłem, ale chciałem tylko wspomnieć o tym

[DefaultValue(false)] 

NIE ustawi atrybutu na wartość false. Patrz: http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx. Jest napisane:

"Wartość DefaultValueAttribute nie spowoduje automatycznego zainicjowania elementu z wartością atrybutu.Należy ustawić wartość początkową w kodzie."

Ten atrybut służy tylko wskazaniu w Visual Studio Designer, co uważasz za wartość domyślną. Jeśli ktoś używający kontroli zmienia tę wartość, zostanie wyświetlony komunikat pogrubiony, aby zasygnalizować, że ta wartość nie jest domyślna.

2

ReSharper zaleca stosowanie auto-własność, a ustawienie wartości domyślnej w konstruktorze tak:

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

    public bool ShowBox { get; set; } 
}