2011-12-14 4 views
0

タイトルが混乱します。私はこれを可能な限り試してクリアします。ウェブフォーム上のフィールドフォームデータベースにダイナミックにコントロールを追加する

私はオープンソースのショッピングカート(nopCommerce)で作業しています。私はこれをカートに入れて、コードやフロントエンドのコードを変更せずに何度も何度も何度も何度も回転させることができると決めました。私はデータベースとCSSファイルからすべてが来るようにしたい。だから私は、ヘッダーメニューを制御するデータベースフィールドを作成する必要があります。

データベースのHTML文字列をページに動的に追加したいと考えています。簡単に。私はそれを世話した。問題は:このコードの真ん中で、私はユーザーコントロールを追加する必要があります。だから、私がやったのは、HTML文字列の中にdiv(サーバーで実行される)が作成されたことです。

私はその後、私は動的にユーザーコントロールを作成するためのPage_LoadにしようとPage_PreInitに

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

をHTML文字列を添付してください。 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> 

何か助けを借りていただければ幸いです。私はこれを最後の日に費やしてしまったので、もう時間を無駄にする余裕はない。

答えて

1

ダイナミックコントロールを使用する場合は、パネルコントロールを使用し、page_initでpanle.controls.add(new litralcontrol( "html");)を使用してdivまたはASPコントロールを挿入することをお勧めします。それは、HTML文字列リテラルにFindControlを行うことはできません

1

を助け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] }); 
関連する問題