【发布时间】:2012-05-23 17:27:13
【问题描述】:
我在调用 ASP.NET 菜单服务器控件的 RenderControl 方法时遇到 NullReferenceException 异常。
我使用以下代码动态创建了控件:
private string RenderMenuHTML()
{
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter hw = new HtmlTextWriter(sw);
string menuXML = MenuManager.GetMenuXML();
if (!string.IsNullOrEmpty(menuXML))
{
Menu menuControl = new UI.Menu();
menuControl.ID = "menu";
// Required properties to use RenderControl
menuControl.SkipLinkText = string.Empty;
menuControl.StaticPopOutImageUrl = "fake.gif";
menuControl.ScrollUpImageUrl = "fake.gif";
menuControl.ScrollDownImageUrl = "fake.gif";
// Data binding
XmlDataSource xmlDS = new XmlDataSource();
xmlDS.ID = "xdsMenu";
xmlDS.Data = menuXML;
xmlDS.XPath = "MenuItems/MenuItem";
// Menu data binding
MenuItemBinding menuItemBinding = new MenuItemBinding();
menuItemBinding.DataMember = "MenuItem";
menuItemBinding.ValueField = "Value";
menuItemBinding.TextField = "Text";
menuItemBinding.ToolTipField = "Text";
menuItemBinding.NavigateUrlField = "NavigateUrl";
menuControl.DataBindings.Add(menuItemBinding);
menuControl.DataSource = xmlDS;
menuControl.DataBind();
menuControl.RenderControl(hw); // <-- Problem here
}
return sb.ToString();
}
我需要做的是获取控件生成的 HTML 代码,这样我就不必手动生成它了。我正在绑定一个从递归菜单层次结构构建的 XML 数据源。
我查看了异常的详细信息,调试器似乎没有提供更多信息。
当我将控件放入 PlaceHolder 时一切正常,但我需要的是 HTML 代码。
我似乎缺少 Menu 或 MenuItem 对象中的一些必需属性,但我在网络上找不到任何依赖于此的东西。
有什么想法吗?
谢谢
【问题讨论】: