基本クラスを使用してコントロールの値/テキストにアクセスする方法はありますか?
TextBoxとHiddenFieldを見ると、System.Web.UI.Control は、それらが共有する最も具体的な基本クラスです。良い候補のようですが、テキスト/値にアクセスする明確な方法がわかりません。
両方のクラス定義がControlValuePropertyAttributeを使用して、テキスト/値を保持するプロパティを識別していることがわかります...たとえば、HiddenField は「Value」に設定され、TextBox は「Text」に設定されます。ただし、その情報を使用してデータを取得する方法がわかりません。
バックグラウンド
Web コントロール (TextBox など) のテキストを受け取り、それを特定の型に変換する拡張メソッドがあります。
<Extension()> _
Public Function GetTextValue(Of resultType)(ByVal textControl As ITextControl, ByVal defaultValue As resultType) As resultType
Return ConvertValue(Of resultType)(textControl .Text, defaultValue)
End Function
ここで、HiddenField (ITextControl インターフェイスを実装していない) の値が必要です。関数をオーバーロードするのは簡単ですが、基本クラスを処理するだけで、オーバーロードを記述する必要がなくなるのはすばらしいことです。
編集 - 追加情報
拡張メソッドの使用例を次に示します。
Dim myThing as Decimal = tbSomeWebControl.GetTextValue(Of Decimal)(0) ' Converts the textbox data to a decimal
Dim yourThang as Date = hdnSomeSecret.GetTextValue(Of Date)(Date.MinValue) ' Converts the hiddenfield data to a Date
現在、隠しフィールドの Value プロパティとテキスト ボックスの Text プロパティを使用してデータにアクセスするため、これには 2 つのオーバーロードが必要です。
過負荷の何が問題になっていますか? ほぼ同じコードを何度も書いていることを除いて、何もありません(定義の最初のパラメーターとその呼び出しの最初の引数を変更するだけです)。