Dyanmical добавление управления в базу данных формы поля на веб-форме - PullRequest
0 голосов
/ 14 декабря 2011

Так что название довольно запутанное. Я постараюсь прояснить это как можно больше.

Я работаю с корзиной покупок с открытым исходным кодом (nopCommerce). Я решил, что я собираюсь встроить это в корзину, которую я могу раскручивать снова и снова, без необходимости изменять код или интерфейсный код. Я хочу, чтобы все исходило из базы данных и файлов CSS. Поэтому мне нужно сделать поле базы данных, которое контролирует меню заголовка.

Я хочу динамически добавить строку HTML из базы данных на страницу. Достаточно просто. Я об этом позаботился. Проблема в том, что прямо в середине всего этого кода мне нужно добавить пользовательский элемент управления. Итак, я создал div (который запускается на сервере) в строке HTML.

Я прикрепляю строку HTML в Page_PreInit

    protected void Page_Init(object sender, EventArgs e)
    {
        headermenu.InnerHtml = GetLocaleResourceString("Header.InnerHTML");
    }

Затем я пытаюсь в Page_Load динамически создать пользовательский элемент управления. Найдите DIV в InnerHTML заголовочного меню и вставьте его туда.

    protected void Page_Load(object sender, EventArgs e)
    {    
        Control navControl = LoadControl("~/Modules/CategoryNavigationFooter.ascx");
        var divControl = this.Page.FindControl("divCategoryContainer");

        divControl.Controls.Add(navControl);
    }

Каждый раз, когда он ищет этот контроль. Он не находит его и возвращает ноль. Вот код, который выходит из базы данных:

<ul class="topmenu sf-menu sf-js-enabled sf-shadow" id="nav-menu">
    <li>
        <a href="~/" runat="server" id="menuHomeLink">Home</a>
    </li>
    <li>
        <a href="~/AboutUs.aspx" runat="server" id="menuAboutUsLink">About Us</a>
            <ul id="ourstory">
                <li><a href="~/Staff.aspx" runat="server" id="menuStaffLink">Meet the Staff</a></li>
            </ul>
    </li>
    <li>
        <a href="~/Blog.aspx" id="menuBlogLink" runat="server">Blog</a>
            <ul id="blog">
                <li><a href="~/Blog.aspx?tag=favorite-posts" id="menuBlogFavorite">Favorite Posts</a></li>
            </ul>
    </li>
    <li>
        <a href="~/Store.aspx" runat="server" id="menuStoreLink">Store</a>
        <div id="divCategoryContainer" runat="Server"></div>
    </li>
    <li>
        <a href="~/Gallery.aspx" runat="server" id="menuGalleryLink">Gallery</a>
                <ul id="gallery">
                    <li><a href="~/Pictures.aspx" runat="server" id="menuPictures">Pictures</a></li>
                    <li><a href="~/Videos.aspx" runat="server" id="menuVideos">Videos</a></li>
                </ul>
    </li>
    <li>
        <a href="~/NewsArchive.aspx" id="menuNewsLink" runat="server">News</a>
    </li>
    <li>
        <a href="~/ContactUs.aspx" id="menuContactLink" runat="server">Contact Us</a>
    </li>
</ul>

Любая помощь будет оценена, ребята. Я провел последний день на этом и не могу позволить себе тратить больше времени.

Ответы [ 2 ]

1 голос
/ 14 декабря 2011

Вы не можете сделать FindControl для буквенной строки html. FindControl будет работать только в дереве элементов управления страницей - headerMenu элемент управления будет находиться в дереве элементов управления. Однако любой html, который вы настроили как контент для этого элемента управления, не будет частью дерева элемента управления - этот html будет рассматриваться как строка как элемент управления и будет передан на страницу вывода (поэтому ваш runat="server" также будет отображаться в html выход).

Решением было бы добавить некоторую строку-заполнитель в ваш html, а затем заменить ее фактическим контролем div. Например,

var html = GetLocaleResourceString("Header.InnerHTML");
// look for our placeholder
var parts = html.split(new string[] { "#MY_DIV_PLACEHOLDER#" });
headerMenu.Controls.Add(new LiteralControl() { Text = parts[0] });
headerMenu.Controls.Add(new Placeholder() { ID="divCategoryContainer" });
headerMenu.Controls.Add(new LiteralControl() { Text = parts[1] });
1 голос
/ 14 декабря 2011

Если вы хотите использовать динамический элемент управления, я предлагаю использовать элемент управления панели, а в page_init вы можете использовать panle.controls.add (новый litralcontrol ("html"); для вставки туда любого элемента управления div или asp. Надеюсь, это так. помогает

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