2011-05-20 50 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