Я пытаюсь выполнить двустороннюю привязку данных к элементам управления в моем пользовательском элементе управления, который размещен в шаблоне 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>
Пользовательский веб-контроль:
<%@ Control Language="C#" ... %>
<asp:TextBox runat="server" ID="TitleTextBox" Text='<%# Bind("Title") %>'>
</asp:TextBox>
Привязка работает нормально, когда FormView находится в режиме просмотра, но когда я переключаюсь в режим редактирования, при вызове UpdateItem
в FormView привязки теряются. Я знаю это, потому что FormView пытается вызвать метод обновления для ObjectDataSource, который не имеет аргумента под названием «Title».
Я попытался решить эту проблему, внедрив IBindableTemplate
для загрузки элементов управления, находящихся внутри моего пользовательского элемента управления, непосредственно в шаблоны (как если бы я ввел их декларативно). Однако при вызове UpdateItem
в режиме редактирования container
, который передается в метод ExtractValues
шаблона, больше не содержит TextBox. Сделано в режиме просмотра!
Я нашел несколько вопросов по SO, которые относятся к этой проблеме, но они довольно устарели и не дают ответов, которые помогли бы мне решить эту проблему.
Как вы думаете, я мог решить эту проблему? Это кажется таким простым требованием, но, видимо, это совсем не то, что ...