2010-11-21 77 views
0

我有一个菜单控件,我动态地填充类别。当用户点击某个类别时,回发应该使用该类别中的产品填充网格。然而,我似乎已经尝试了所有可能的方式,即无论页面生命周期时间,只是总是得到这个错误:动态生成菜单的ViewState错误

未能加载视图状态。要将视图状态加载到其中的控制树必须与前一个请求期间用于保存视图状态的控制树相匹配。

这里是我的所有代码:

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(); 
} 

这里是我的菜单:

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

EnableViewState只有,因为它不与真正工作,要么。

回答

0

对此的一个答案是避免回发和代码URL的菜单项。更多RESTful,但可能使AJAX菜单更难一点。