动态构建菜单的ViewState错误

时间:2010-11-21 00:39:36

标签: asp.net

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

无法加载viewstate。加载viewstate的控制树必须与在上一个请求期间用于保存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 false ,因为它无法与 true 一起使用。

1 个答案:

答案 0 :(得分:0)

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