Меню ASP.NET из XML-файла, выпадающий справа, должен быть ниже - PullRequest
1 голос
/ 09 декабря 2011

Я нашел Привязка элемента управления ASP.NET Menu к XML Вопрос полезен при поиске моей проблемы.Теперь проблема, с которой я сталкиваюсь, состоит в том, что мое меню выглядит следующим образом (даже главное меню как расширенное меню, прикрепленное к нему. Я хочу, чтобы оно регулярно выпадало. Могу ли я достичь этого?*

Мой xml-файл прикреплен. Я попытался удалить корневой тег, но это не 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:mitchell@4guysfromrolla.com</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; }
}

1 Ответ

0 голосов
/ 09 декабря 2011

Похоже, это невозможно .

Microsoft на эта ссылка говорит, что XML должен иметь корневой элемент и правильную структуру xml с menu, menuitem и свойствами.

Класс Menu содержит свойство 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. Корневой элемент не отображается (нам нужен заголовок для меню, такого как Edit, File и т. Д.)
  2. Все подменю автоматически расширяются. Если вы наведете на него курсор, он развернет подменю.

Похоже, еще одна плохая реализация Microsoft. Это скорее не реализация, а просто фальшивка, которая делает то-то и то-то и результат, а результата нет.

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