2011-12-09 35 views
1
以下

我找到Bind ASP.NET Menu control to XML問題有助於找到我的問題。現在我面臨的問題是我的菜單看起來像這樣(即使在主菜單的擴展連接到它的菜單。我希望它有一個普通的下拉,我能做到嗎?來自XML文件的ASP.NET菜單,下拉菜單在右邊,需要在

enter image description here

我XMLFILE附後。我試着刪除根標籤,但比它不是一個XML文件,它打破了代碼。

<?xml version="1.0" encoding="utf-8" ?> 
<menu> 
    <menuItem> 
     <text> 
      &lt;img align="middle" src="images/new.gif" width="32" 
      height="16" /&gt; What's New? &lt;img align="middle" 
      src="images/right.gif" width="16" height="16" /&gt; 
     </text> 
     <subMenu> 
      <menuItem> 
       <text>&amp;nbsp;&amp;nbsp;&amp;nbsp;New Articles</text> 
       <url>/suboption1.1.html</url> 
      </menuItem> 
      <menuItem> 
       <text>&amp;nbsp;&amp;nbsp;&amp;nbsp;New FAQs</text> 
       <commandName>NewFAQ</commandName> 
      </menuItem> 
     </subMenu> 
    </menuItem> 
    <menuItem> 
     <text> 
      &lt;img align="middle" src="images/paw.gif" width="20" 
      height="16" /&gt; Animal Facts &lt;img align="middle" 
      src="images/right.gif" width="16" height="16" /&gt; 
     </text> 
     <url>/option2.html</url> 
     <subMenu> 
      <menuItem> 
       <text> 
        <![CDATA[<img align="middle" src="images/paw.gif" 
       width="20" height="16" /> Animal Facts <img 
       align="middle" src="images/right.gif" width="16" 
       height="16" />]]> 
       </text> 
       <url>/suboption2.1.html</url> 
       <subMenu> 
        <menuItem> 
         <text>Facts about Terriers</text> 
         <url>/suboption2.1.1</url> 
        </menuItem> 
        <menuItem> 
         <text>Facts about Beagles</text> 
         <url>/suboption2.1.2</url> 
        </menuItem> 
        <menuItem> 
         <text>Facts about Great Danes</text> 
         <url>/suboption2.1.3</url> 
        </menuItem> 
        <menuItem> 
         <text>Facts about Poodles</text> 
         <url>/suboption2.1.4</url> 
        </menuItem> 
       </subMenu> 
      </menuItem> 
      <menuItem> 
       <text> 
        &amp;nbsp;&amp;nbsp;&amp;nbsp;Facts About 
        Goats 
       </text> 
       <url>/suboption2.2.html</url> 
      </menuItem> 
      <menuItem> 
       <text> 
        &amp;nbsp;&amp;nbsp;&amp;nbsp;Facts About 
        Snakes 
       </text> 
       <url>/suboption3.2.html</url> 
      </menuItem> 
     </subMenu> 
    </menuItem> 
    <menuItem> 
     <text> 
      &lt;img align="middle" src="images/email.gif" width="18" 
      height="18" /&gt; Contact 
     </text> 
     <url>mailto:[email protected]</url> 
    </menuItem> 
</menu> 

添加代碼

protected void Page_Load(object sender, EventArgs e) 
{ 

    if (!Page.IsPostBack) 
    { 
     MainMenu.DataSource = GetSiteMapDataSource("firtmenu.xml"); 
     MainMenu.DataBind(); 
    } 
} 

private XmlDataSource GetSiteMapDataSource(string siteMapFileName) 
{ 
    if (siteMapFileName != string.Empty) 
    { 
     XmlDataSource xmlSource = new XmlDataSource(); 
     xmlSource.DataFile = siteMapFileName; 
     xmlSource.DataBind(); 
     return xmlSource; 
    } 
    else 
    { return null; } 
} 
+0

爲什麼不用XMLReader解析XML並從中形成菜單? – CBRRacer

+0

我想要一個快速解決方案。我發現這一點,它有這個問題。可以探索其他選項 –

回答

0

看起來不可能

微軟在this link說,XML必須有一個根元素和一個適當的xml結構與菜單,menuitem和屬性。

菜單類包含一個DataSource屬性,可以接受一個 路徑字符串到一個XML文件或已經具有一個XmlDocument實例 加載正確的XML數據。具體來說,XML數據必須有一個 根元素和任意數量的 元素。每個元素必須具有一個元素, 指定要顯示的菜單項的文本,以及可選的 和元素。如果菜單項具有子菜單,那麼 元素應該包含一個元素,該元素與 元素一樣可以具有任意數量的元素。

更多...

我發現sitepoint,誰問同樣的問題類似的線程。那裏的解決方案是使用XPATH來過濾結果。在我的示例中,您將使用

XmlDataSource xmlSource = new XmlDataSource();    
xmlSource.XPath = "/menu/menuItem"; // Notice XPAth filter in this line 
xmlSource.DataFile = siteMapFileName; 

它會過濾XML,但會產生更多問題。也就是說

  1. 根元素不被顯示(我們需要像編輯菜單標題,文件等)
  2. 所有的子菜單會自動擴展。如果將鼠標懸停在上面,則會展開子菜單。

看起來像微軟的另一個糟糕的實施。這不是一個實現,而只是一個虛假的做到這一點,然後結果,沒有結果。