Теперь все упрощено, но вот так:
У меня есть пользовательский элемент управления, который состоит только из одного * .ascx файла. Элемент управления не имеет выделенного кода: это просто скрипт с несколькими функциями, например:
<%@ Control Language="VB" EnableViewState="False" ClassName="MyControlType" %>
<script runat="server">
Public Function MyFunction() As String
return "CalledMyFunction!"
End Function
</script>
Вот и весь файл. Я могу успешно добавить этот элемент управления на страницу aspx, используя разметку следующим образом:
<%@ Register Src="~/path/to/Control.ascx" TagPrefix="aaa" TagName="MyControl" %>
...
<aaa:MyControl runat="server" id="MyControl1" />
Теперь я хочу вызвать MyFunction из кода страницы, например:
Dim someString As String = MyControl1.MyFunction()
К сожалению, я не могу этого сделать. Вместо этого я получаю ошибку компиляции с эффектом "'MyFunction' is not a member of 'System.Web.UI.UserControl'.
"
Я тоже пробовал это:
Dim someString As String = DirectCast(MyControl1, MyControlType).MyFunction()
и затем компилятор говорит мне: "Type 'MyControlType' is not defined.
"
Я много играл с этим, и я просто не могу заставить его работать. Все попытки привести MyControl1 к более точному типу потерпели неудачу, как и другие обходные пути. Я подозреваю, что проблема заключается в том, что файл ascx без выделенного кода не может быть скомпилирован в сборку, но выделенный код хочет быть скомпилирован в сборку, и поэтому компилятор запутывается в типе элемента управления.
Что мне нужно сделать, чтобы вызвать эту функцию?
[править]
Так что мне просто нужно добавить код позади пользовательского элемента управления. Это то, что я хотел сделать в любом случае. Я все еще хотел бы знать, как сделать это без необходимости.