2010-06-15 42 views
2

我想在我的用戶控件中的控件執行雙向數據綁定,該控件位於FormView模板內:嵌套在FormView中的用戶控件中的控件的雙向數據綁定不起作用

<asp:ObjectDataSource runat="server" ID="ObjectDataSource" 
    TypeName="WebApplication1.Data" SelectMethod="GetItem" UpdateMethod="UpdateItem"> 
</asp:ObjectDataSource> 
<asp:FormView runat="server" ID="FormView" DataSourceID="ObjectDataSource"> 
    <ItemTemplate> 
     <uc:WebUserControl1 runat="server"></uc:WebUserControl1> 
    </ItemTemplate> 
    <EditItemTemplate> 
     <uc:WebUserControl1 runat="server"></uc:WebUserControl1> 
    </EditItemTemplate> 
</asp:FormView> 

的web用戶控件:當FormView控件在View模式,但是當我切換到編輯模式,當在FormView控件調用UpdateItem,綁定丟失

<%@ Control Language="C#" ... %> 
<asp:TextBox runat="server" ID="TitleTextBox" Text='<%# Bind("Title") %>'> 
</asp:TextBox> 

的結合工作正常。我知道這是因爲FormView試圖調用ObjectDataSource上沒有名爲'Title'的參數的更新方法。

我試圖通過實現IBindableTemplate來加載我的用戶控件中的控件直接到模板中(就像我已經聲明地輸入它們一樣)來解決這個問題。但是,在編輯模式下調用UpdateItem時,傳遞到模板的ExtractValues方法的container不再包含TextBox。它在視圖模式下做到了!

我發現了一些關於這個問題的問題,但他們相當過時,他們沒有提供任何幫助我解決這個問題的答案。

您認爲我能解決這個問題嗎?它似乎是這樣一個簡單的要求,但顯然它只是...

回答

1

我目前的解決方法是,雖然相當繁瑣,子類FormView類和使用子類控制,實現我自己的數據綁定邏輯(從新屬性獲取數據字段名稱)而不是使用<%# %>語法。顯然,後者產生的代碼是真正的罪魁禍首,因爲它不支持這種嵌套控制場景。

1

我結束了,使用舊的ASP包含聲明

< - %包括文件= 「文件名」 - >

而不是使用用戶控件來處理的代碼重複問題。

+0

歡迎來到Stack Overflow。這似乎不是OP問題的答案 – 2012-12-04 23:08:01

+0

這可能是事實,但它是相關的。我發現這個答案簡單而有用。 – 2017-02-28 14:27:54

相關問題