Как добавить значение по умолчанию в пользовательское свойство профиля ASP.NET - PullRequest
0 голосов
/ 16 июня 2010

Я знаю, что вы можете добавить defaultValues, используя web.config следующим образом:

<profile>
    <properties>
        <add name="AreCool" type="System.Boolean" defaultValue="False" />
    </properties>
</profile>

, но у меня есть Профиль, унаследованный от класса:

<profile inherits="CustomProfile" defaultProvider="CustomProfileProvider" enabled="true">
  <providers>
    <clear />
    <add name="CustomProfileProvider" type="CustomProfileProvider" />
  </providers>
</profile>

Вот класс:

Public Class CustomProfile
    Inherits ProfileBase

    Public Property AreCool() As Boolean
        Get
            Return Me.GetPropertyValue("AreCool")
        End Get
        Set(ByVal value As Boolean)
            Me.SetPropertyValue("AreCool", value)
        End Set
    End Property

End Class

Я не знаю, как установить значение свойства по умолчанию.Это вызывает ошибки, потому что без значения по умолчанию, он использует пустую строку, которая не может быть преобразована в логическое значение.Я попытался добавить <DefaultSettingValue("False")> _, но это, похоже, не имело значения.

Я также использую пользовательский ProfileProvider (CustomProfileProvider).

Ответы [ 2 ]

0 голосов
/ 19 октября 2010

Типичный способ, которым Microsoft делает это во всей платформе .NET, - это использование части get, чтобы проверить, можно ли преобразовать значение и вернуть значение по умолчанию, если это невозможно.Например:

Public Class CustomProfile 
    Inherits ProfileBase 

    Public Property AreCool() As Boolean 
        Get 
            Dim o as Object = Me.GetPropertyValue("AreCool") 
            If TypeOf o Is Boolean Then
                Return CBool(o)
            End If
            Return False 'Return the default
        End Get 
        Set(ByVal value As Boolean) 
            Me.SetPropertyValue("AreCool", value) 
        End Set 
    End Property 

End Class
0 голосов
/ 16 июня 2010

Просто подумайте, можете ли вы сделать что-то вроде этого или какой-то вариант (то есть вместо .length, использовать dbnull.value () или, тем не менее, вам нужно проверить, является ли это фактическим элементом?

Отредактированный коддля обработки пустых параметров

Открытый класс CustomProfile Наследует ProfileBase

Dim _outBool as boolean
Public Property AreCool() As Boolean 
    Get 
        Return Me.GetPropertyValue("AreCool")
    End Get 
    Set(ByVal value As Object) 
         ''if the value can be parsed to boolean, set AreCool to value, else default to false''
         If([Boolean].TryParse(value, outBool) Then
            Me.SetPropertyValue("AreCool", value)
        Else
            Me.SetPropertyValue("AreCool", False)
        End If

    End Set 
End Property 

Конечный класс

...