4

私の.aspxページには;

    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" AspCompat="True" %>

    <%@ Register src="Modules/Content.ascx" tagname="Content" tagprefix="uc1" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <title></title>
    </head>
    <body>
    <form id="form1" runat="server">
        <div>
        <asp:PlaceHolder ID="Modulecontainer" runat="server"></asp:PlaceHolder>
        </div>
        </form>
    </body>  
</html>

私のaspx.vbには;

    Try
        Dim loadmodule As UserControl
        loadmodule = Me.LoadControl("~/modules/content.ascx")
        Modulecontainer.Controls.Add(loadmodule)
    Catch ex As Exception
        Response.Write(ex.ToString & "<br />")
    End Try

結果は空のプレースホルダーであり、エラーはありません。

助けてくれてありがとう

PS Fat_Tonyの回答後、コードを次のように変更しました。

Try
            Dim loadmodule As ASP.ContentModule
            loadmodule = CType(LoadControl("~\Modules\Content.ascx"), ASP.ContentModule)
            Modulecontainer.Controls.Add(loadmodule)
        Catch ex As Exception
            Response.Write(ex.ToString & "<br />")
        End Try

しかし、残念ながらそれでも結果はありません。

4

2 に答える 2

5

UserControlをタイプ「Control」として宣言するのではなく、UserControl.ascxファイルで指定したクラス名として宣言します。

<%@ Control className="MyUserControl" %>

したがって、コードビハインドの.aspxページでは次のようになります。

Dim objControl as ASP.MyUserControl = CType(LoadControl("~\Controls\MyUserControl.ascx"), ASP.MyUserControl)

詳細については、MSDNを参照してください。

編集:ユーザーコントロールの分離コードファイルを確認し、そこにある名前空間とクラス名をメモします。ユーザーコントロールを作成すると、フォルダー名とアプリケーションの名前空間を含む名前空間に自動的に追加されました。

次に、.aspx.vbで、「ASP.ContentModule」を.ascx.vbファイルの「Namespace.ClassName」に置き換えます。また、プレースホルダーでAddメソッドを呼び出していることを確認してください。

私の例はC#ですが、必要に応じてvbに入れることができます。私のアプリケーションは便利な名前で「テスター」と名付けられました。

ASCXコードビハインド:

namespace Tester.modules
{
    public partial class content : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
    }
}

ASPXコードビハインド:

namespace Tester
{
    public partial class _Default : System.Web.UI.Page
    {   
        private Namespace.ClassName loadmodule;
        protected void Page_Load(object sender, EventArgs e)
        {
            loadmodule = (Namespace.ClassName)LoadControl("~/modules/content.ascx");
            Modulecontainer.Controls.Add(loadmodule);
        }
    }
}
于 2010-04-15T10:05:57.530 に答える
2

VBについてはよくわかりませんが、コントロールを単なるコントロールではなくUserControlとして宣言する必要はありませんか?例:変更してみてください

Dim loadmodule As Control

Dim loadmodule As UserControl
于 2010-04-15T10:04:11.623 に答える