我最近创建了一个Usercontrol,其中包含一个Listview(数据绑定到LinqDataSource),将用户控件添加到现有的aspx页面(动态加载usercontrol)。
我看到一个意外的行为,其中加载了usercontrol并且在我们最初加载页面时显示了listview,但是当我尝试单击插入按钮(来自ListView的InsertTemplate)时发生回发,页面重新加载但没有任何迹象表明我的Listview,甚至标题,查看页面来源确认它已完全消失
问题不在于没有重新加载用户控件,我可以看到来自同一用户控件的其他元素呈现正常。
我已经达到了这样的程度,即我已经将用户控件加载到一个新的'test'aspx页面中,并且在那里工作正常。我慢慢地将现有页面中的项目添加到测试页面(javascript,jquery验证,recaptcha,其他asp.net控件),它仍然可以正常工作。现有的控件都没有“知道”有关Listview的任何内容,所以我看不出它是如何受到影响的。
有关为何可能发生这种情况或欢迎使用调试选项的任何建议。现在我只是苦心地将旧页面重新创建到我的测试页面中,但现在是时候我可以在其他地方使用它了。
我的下一步是将一堆链接的CascadingDropDowns移到测试页面。
更新: 我注意到了回发的另一个症状,列表视图的'ItemInserting'事件没有被触发。
答案 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。