【问题标题】:Dyanmically adding control into field form database on web form在 Web 表单上从数据库中动态地将控件添加到字段中
【发布时间】:2012-01-19 22:33:49
【问题描述】:

所以标题有点混乱。我会尽量解决这个问题。

我正在使用开源购物车 (nopCommerce)。我决定将它构建成一个购物车,我可以一遍又一遍地旋转,而无需更改后面的代码或前端代码。我希望一切都来自数据库和 CSS 文件。所以我需要制作一个控制标题菜单的数据库字段。

我想将数据库中的 HTML 字符串动态添加到页面上。很容易。我已经处理好了。问题是:在所有这些代码的中间,我需要添加一个用户控件。所以我所做的是在 HTML 字符串中创建了一个 div(在服务器上运行)。

我在 Page_PreInit 中附加了 HTML 字符串

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

然后我尝试在 Page_Load 中动态创建用户控件。从 headerMenu 的 InnerHTML 中找到 DIV 并将其插入其中。

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

        divControl.Controls.Add(navControl);
    }

每次它寻找那个控件。它没有找到它并返回null。这是来自数据库的代码:

<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>

任何帮助将不胜感激。我已经在这上面度过了最后一天,不能再浪费时间了。

【问题讨论】:

    标签: asp.net sql dynamic webforms


    【解决方案1】:

    如果您想使用动态控件,我建议您使用面板控件,在 page_init 中您可以使用 panle.controls.add(new litralcontrol("html"); 插入任何 div 或 asp 控件。希望如此帮助

    【讨论】:

      【解决方案2】:

      您不能对 html 文字字符串执行 FindControlFindControl 仅适用于页面控件树 - 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] });
      

      【讨论】:

        猜你喜欢
        • 2012-06-05
        • 2018-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-08
        • 2015-02-14
        相关资源
        最近更新 更多