これはかなり単純化されていますが、次のようになります。
単一の *.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 ファイルをアセンブリにコンパイルできないが、コード ビハインドをアセンブリにコンパイルする必要があるため、コンパイラがコントロールの型について混乱することだと思われます。
その関数を呼び出すにはどうすればよいですか?
[編集]
だから、ユーザー コントロールのコード ビハインドを追加する必要があります。とにかくやりたかったことです。ただし、これを必要とせずにこれを行う方法を知りたいです。