我有一个菜单控件,我动态填充类别。当用户单击某个类别时,回发应使用该类别中的产品填充网格。但是,我似乎已经尝试了各种可能的方式,即无论页面生命周期时间如何,只是总是得到这个错误:
无法加载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 一起使用。
答案 0 :(得分:0)
对此的一个答案是避免将回发和代码URL放入菜单项中。更多RESTful,但可能使AJAXing菜单更难。