有没有办法使用基类访问控件的值/文本?
查看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 属性访问数据。
过载有什么问题?什么都没有,除了我一遍又一遍地编写几乎相同的代码(只是修改定义的第一个参数和它的调用的第一个参数)。