列表视图未在回发时呈现

时间:2011-05-20 12:03:06

标签: asp.net

我最近创建了一个Usercontrol,其中包含一个Listview(数据绑定到LinqDataSource),将用户控件添加到现有的aspx页面(动态加载usercontrol)。

我看到一个意外的行为,其中加载了usercontrol并且在我们最初加载页面时显示了listview,但是当我尝试单击插入按钮(来自ListView的InsertTemplate)时发生回发,页面重新加载但没有任何迹象表明我的Listview,甚至标题,查看页面来源确认它已完全消失

问题不在于没有重新加载用户控件,我可以看到来自同一用户控件的其他元素呈现正常。

我已经达到了这样的程度,即我已经将用户控件加载到一个新的'test'aspx页面中,并且在那里工作正常。我慢慢地将现有页面中的项目添加到测试页面(javascript,jquery验证,recaptcha,其他asp.net控件),它仍然可以正常工作。现有的控件都没有“知道”有关Listview的任何内容,所以我看不出它是如何受到影响的。

有关为何可能发生这种情况或欢迎使用调试选项的任何建议。现在我只是苦心地将旧页面重新创建到我的测试页面中,但现在是时候我可以在其他地方使用它了。

我的下一步是将一堆链接的CascadingDropDowns移到测试页面。

更新: 我注意到了回发的另一个症状,列表视图的'ItemInserting'事件没有被触发。

2 个答案:

答案 0 :(得分:2)

您是否在列表视图中有以下手动绑定代码:

ListView1.DataSource = SomeData;
ListView1.DataBind();

这是否包含在!IsPostback检查?

如果是,则删除IsPostback检查。

数据绑定控件的标准操作是取消选择返回0行。为防止这种情况,您可以设置一个空数据模板。

答案 1 :(得分:1)

检查以确保启用了Viewstate(颤抖)。这通常是导致这种情况的原因。并且不要只检查控件本身,检查控制层次结构,甚至页面。如果在层次结构的任何位置禁用了Viewstate,则会禁用控件上的Viewstate,并可能导致此问题。

例如:

<asp:Panel ID="pnlMain" runat="server" EnableViewState="false">
  <my:Control ID="myControl" runat="server" EnableViewState="true" />
</asp:Panel>

即使我在我的控件上设置了EnableViewState="true",它仍会被禁用,因为它的父级(pnlMain')已禁用Viewstate。