うまくいけば、これはばかげた質問です (簡単に答えられるはずです)。
必要なフィールドのタイプに応じて、TextBox、いくつかのバリデーター、その他のものをカプセル化する複合サーバー コントロールを作成しようとしています。
私のコントロールには、何を表示するかを決定できる「DataType」値があります。たとえば、DataType が「Date」の場合、AjaxControlToolkit.CalendarExtender などをレンダリングします。
私の一般的な「Value」プロパティはオブジェクトであり、DataType プロパティが要求するものは何でも返すため、上記の例では、Value は Date 型になります。
ここに私の問題があります。受信した Value プロパティを、実行時に DataType が要求するものに変換する必要があります。
ご覧のとおり、 TypeConverter を作成しようとしましたが、うまくいかないようで、コンパイル中に次のエラーが発生します。
タイプ 'System.Object' の値のコードを生成できません。このエラーは、Value のプロパティ値を生成しようとしたときに発生しました。
どんな助けでも大歓迎です!
コントロールを呼び出そうとする方法は次のとおりです。
<custom:SomeTextControl ID="dateFoo" runat="server" DataType="Date" Value="08/11/2009" />
これが私のクラスです:
Public Class SomeTextControl
Inherits Control
Private _Value as Object
<Bindable(True), TypeConverter(GetType(ObjectConverter))> _
Public Property Value() As Object
Get
Return _Value
End Get
Set(ByVal value As Object)
_Value = value
End Set
End Property
End Class
Public Class ObjectConverter
Inherits TypeConverter
Public Overrides Function ConvertFrom(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal culture As System.Globalization.CultureInfo, ByVal value As Object) As Object
Dim o As Object
o = value
Return o
End Function
Public Overrides Function CanConvertFrom(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal sourceType As System.Type) As Boolean
If sourceType Is GetType(String) Then
Return True
End If
Return MyBase.CanConvertFrom(context, sourceType)
End Function
Public Overrides Function CanConvertTo(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal destinationType As System.Type) As Boolean
If destinationType Is GetType(String) Then
Return True
End If
Return MyBase.CanConvertTo(context, destinationType)
End Function
End Class