当调用ASP.NET菜单服务器控件的RenderControl方法时,我遇到了NullReferenceException异常。在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对象中的一些必需的属性,但我无法在Web上找到任何依赖此的属性。
任何想法?
谢谢
我有一个包含来自预定义模板的HTML代码的字符串。我想用实际菜单替换{Template.Menu}之类的东西,所以我想我只是使用RenderControl来获取代码。 – Jason 2011-01-05 16:09:55
@Jason:啊,好的。这就说得通了。可能有更好的方法来做这件事,但也可能是因为你正在做的事而被过度劳累。 ;-)我认为我的建议应该让你有所需要。 – Chris 2011-01-05 16:12:09
你可能是对的,我想我会使用HtmlTextWriter代替Menu控件来手工生成代码。谢谢你的建议! – Jason 2011-01-05 16:17:52