2010-06-15 4 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> 

управления веб-пользователя:

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

связывания отлично работает, когда FormView находится в режиме просмотра, но при переходе в режим редактирования, при вызове UpdateItem на FormView, переплеты теряются. Я знаю это, потому что FormView пытается вызвать метод обновления на объекте ObjectDataSource, у которого нет аргумента под названием «Заголовок».

Я попытался решить эту проблему, выполнив IBindableTemplate для загрузки элементов управления, находящихся внутри моего пользовательского элемента управления, непосредственно в шаблоны (как если бы я ввел их декларативно). Однако при вызове UpdateItem в режиме редактирования container, который передается в метод шаблона ExtractValues, больше не содержит TextBox. Это было в режиме просмотра!

Я нашел несколько вопросов о SO, которые относятся к этой проблеме, но они скорее устарели, и они не дают ответов, которые помогли мне решить эту проблему.

Как вы думаете, я могу решить эту проблему? Кажется, это простое требование, но, видимо, это что-то вроде этого ...

ответ

1

Мое текущее обходное решение для этого, хотя и довольно громоздко, подклассифицировать класс FormView и использовать в нем подклассы управления, реализующие мою собственную логику привязки данных (принимая имя поля данных из нового свойства) вместо использования синтаксиса <%# %>. По-видимому, код, который он генерирует, является настоящим виновником, поскольку он не поддерживает этот вложенный контрольный сценарий.

1

я в конечном итоге, используя старый жерех включает Заявление о

< -% включает файл = «имя файл» ->

вместо использования пользовательских элементов управления для решения вопроса дублирования коды ,

+0

Добро пожаловать в Переполнение стека. Это не похоже на вопрос OP –

+0

Это может быть правдой, но это было актуально. Я нашел этот ответ простым и полезным. –

Смежные вопросы