在我的.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

结果是空占位符和没有错误。

非常感谢任何帮助

Fat_Tony的回答后P.S我改变的代码;

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

但是,还没有结果不幸的是

有帮助吗?

解决方案

而不是声明你用户控件类型“控制”,其声明为您在UserControl.ascx文件中指定的类别名称:

<%@ Control className="MyUserControl" %>

因此在.aspx页面上的代码隐藏:

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

MSDN使用更多信息。

编辑:检查代码隐藏文件的用户控件,并注意到这是在那里命名空间和类名。当我创建我的用户控制,将其自动添加到其中载有文件夹名称以及应用程序名称空间中的命名空间。

然后,在你.aspx.vb,从.ascx.vb文件替换 “ASP.ContentModule” 与 “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);
        }
    }
}

其他提示

我不知道VB太清楚,但并不需要声明的控制是一个用户控件,而不仅仅是控制?例如尝试改变

Dim loadmodule As Control

Dim loadmodule As UserControl
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top