2010-11-21 4 views
0

Ich habe ein Menü-Steuerelement, das ich dynamisch mit Kategorien auffüllen. Wenn ein Benutzer auf eine Kategorie klickt, sollte das Postback ein Gitter mit Produkten in dieser Kategorie füllen. Ich habe jedoch versucht, jeden möglichen Weg, d. H. Welche Seitenlebenszykluszeit, immer nur diesen Fehler zu bekommen:ViewState Fehler mit dynamisch aufgebautem Menü

Fehler beim Laden von Viewstate. Der Kontrollbaum, in den der Viewstate geladen wird, muss mit dem Kontrollbaum übereinstimmen, der beim Speichern der Viewstate während der vorherigen Anfrage verwendet wurde.

Hier ist mein Code:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     BuildCategoryMenu(); 
    } 
} 

protected void categoryMenu_ItemClick(object source, DevExpress.Web.ASPxMenu.MenuItemEventArgs e) 
{ 
    var catId = new Guid(e.Item.Name); 
    ListProductsByCatId(catId); 
} 

private void BuildCategoryMenu() 
{ 
    var cats = _categoryService.ListActive(); 
    categoryMenu.Items.Clear(); 
    foreach (var cat in cats) 
    { 
     categoryMenu.Items.Add(new MenuItem { Text = cat.Name, Value = cat.id.ToString() }); 
    } 
} 

private void ListProductsByCatId(Guid catId) 
{ 
    productGrid.DataSource = _productService.ListByCatId(new Guid("a5c2f0ef-a3cc-4af1-abac-37f1be6a5c74")); 
    productGrid.DataBind(); 
} 

Hier ist mein Menü:

<asp:Menu ID="categoryMenu" runat="server" EnableViewState="false"> 
</asp:Menu> 

EnableViewState ist nur falsch, weil es nicht mit wahr entweder funktioniert hat.

Antwort

0

Eine Antwort darauf ist, die Postbacks und Code URLs in den Menüpunkten zu vermeiden. Mehr RESTful, aber wahrscheinlich machen AJAXing das Menü ein bisschen schwieriger.