2011-05-20 27 views
1

我最近创建了一个包含ListView(LinqDataSource的数据绑定)的UserControl,它将用户控件添加到现有的aspx页面(动态加载usercontrol)。列表视图未在回发中呈现

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

问题不是在重新加载usercontrol,我可以看到来自同一个usercontrol呈现的其他元素好。

我已经到了使用usercontrol并将其加载到一个新的'测试'aspx页面的地步,它在那里工作得很好。我已经慢慢地从我现有的页面添加项目到测试页面(JavaScript,jQuery验证,recaptcha,其他asp.net控件),它仍然正常工作。现有的控件都不知道有关Listview的任何内容,所以我看不出它会如何受到影响。

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

对我来说,下一步是将一堆链接的CascadingDropDowns移动到测试页面上。

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

回答

2

你有手工绑定代码,如您的列表视图以下内容:

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

这是包裹在一个的IsPostBack检查!?

如果是,则删除IsPostback检查。

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

+0

感谢rtpHarry,有一些代码绑定正在进行,目前只是一个where条件,尽管这不在回发中。我已经有一个空的数据模板,它也没有渲染。 – TygerKrash 2011-05-20 13:47:42

+0

在这里给你答案rtpHarry,因为这是你的帖子,让我到底。问题是我错过了ListView.DataBind()调用。添加它使我的listview渲染得很好。我仍然不太明白为什么它在我的测试页面上工作。 – TygerKrash 2011-05-20 15:28:53

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'的)视图状态被禁用。

+0

感谢布兰登,但似乎并没有被事业。我不在应用程序的任何位置(包括web.config)中使用EnableViewState =“false”。我已经向列表视图和控件所在的表单添加了显式的enableViewstate,对行为没有任何改变。我已经用更多的信息更新了这个问题 – TygerKrash 2011-05-20 13:46:57