Есть ли способ получить доступ к значению/тексту элемента управления с использованием базового класса?Как получить значение из System.Web.UI.Control (базовый класс)?
Глядя на TextBox и HiddenField, System.Web.UI.Control - это наиболее специфический базовый класс, который они разделяют. Кажется хорошим кандидатом, но я не вижу очевидного способа доступа к тексту/ценности.
Я вижу, что оба определения классов используют ControlValuePropertyAttribute, чтобы идентифицировать свойство, которое хранит их текст/значение ... например. У HiddenField установлено значение «Значение», для TextBox установлено значение «Текст». Не уверен, как использовать эту информацию для извлечения данных.
фон
У меня есть метод расширения, который принимает текст некоторых веб-управления (например, 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). Было бы легко перегрузить функцию, но было бы просто просто обработать базовый класс и больше не иметь дело с записью перегрузок.
Edit - дополнительная информация
Вот пример того, как метод расширения используется
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 в hiddenfields и тому Текстовое свойство в текстовых файлах.
Что случилось с перегрузками? Ничего, кроме того, что я пишу почти один и тот же код снова и снова (просто изменяя первый параметр определения и 1-й аргумент его вызова).
Он не похож ни этикетки или скрытое реализовать класс IDataItemContainer. У них есть свойство, но экземпляры возвращают null/Nothing для myControl.DataItemContainer –
Возможно, лучшим решением могло бы стать создание нескольких методов расширения для конкретных элементов управления, которые вам нужны для его использования, хотя я не совсем понимаю, что в частности, вы пытаетесь сделать. –
В настоящее время у меня есть несколько методов расширения, а общая логика - в своей собственной функции ConvertValue. Просто ищите способ консолидации специфичных для управления методов (на самом деле это не проблема, а только код лучше) –