Программная загрузка пользовательских элементов управления в заполнитель (asp.net) - PullRequest
4 голосов
/ 15 апреля 2010

На моей странице .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

Результат - пустой заполнитель и ошибок нет.

Большое спасибо за любую помощь

P.S после ответа 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

Но, к сожалению, результатов пока нет.

Ответы [ 2 ]

5 голосов
/ 15 апреля 2010

Вместо того, чтобы объявлять свой 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» на «Namespace.ClassName» из файла .ascx.vb. Также убедитесь, что вы все еще вызываете метод 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);
        }
    }
}
2 голосов
/ 15 апреля 2010

Я не слишком хорошо знаю VB, но разве вам не нужно объявлять элемент управления UserControl, а не просто Control? например Попробуйте изменить

Dim loadmodule As Control

Для

Dim loadmodule As UserControl
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...