當調用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