Двустороннее связывание данных элементов управления в пользовательском элементе управления, вложенном в FormView, не работает - PullRequest
2 голосов
/ 15 июня 2010

Я пытаюсь выполнить двустороннюю привязку данных к элементам управления в моем пользовательском элементе управления, который размещен в шаблоне 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, которые относятся к этой проблеме, но они довольно устарели и не дают ответов, которые помогли бы мне решить эту проблему.

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

Ответы [ 2 ]

1 голос
/ 13 декабря 2010

Я закончил, используя старый оператор asp include

<-% include file = "filename" ->

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

1 голос
/ 06 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...