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> 

웹 사용자 정의 컨트롤 다음 FormView보기 모드에 있지만 나는 FormView에 UpdateItem를 호출시, 편집 모드로 전환 할 때, 바인딩이 손실되는 경우

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

바인딩 작품 잘. FormView는 'Title'이라는 인수가없는 ObjectDataSource에서 update 메소드를 호출하려고하기 때문에 이것을 알고 있습니다.

IBindableTemplate을 구현하여 사용자 정의 컨트롤 안에있는 컨트롤을 템플릿에 직접로드하려고했습니다 (마치 선언적으로 입력 한 것처럼). 그러나 편집 모드에서 UpdateItem을 호출하면 템플릿의 ExtractValues 메서드로 전달되는 container에 TextBox가 더 이상 포함되지 않습니다. 그것은보기 모드에서했다!

나는이 문제와 관련된 몇 가지 질문을 발견했지만 오히려 연대 기적이며이 문제를 해결하는 데 도움이되는 답변을 제공하지 않습니다.

어떻게이 문제를 해결할 수 있다고 생각하십니까? 그것은 단순한 요구 사항처럼 보이지만 외관상으로는 아무것도 아닌 것 같습니다 ...

답변

1

내 현재의 해결 방법은 다소 복잡하지만 FormView 클래스를 서브 클래스로 만들고 서브 클래 싱 된 컨트롤을 사용하여 자체 데이터 바인딩 논리를 구현합니다 (새 속성에서 데이터 필드 이름 가져 오기) <%# %> 구문을 사용하는 대신. 분명히 후자가 생성하는 코드는이 중첩 제어 시나리오를 지원하지 않기 때문에 여기에서 진짜 범인입니다. = 포함 "파일 이름"파일을 % - -

1

나는 문을

<을 기존 ASP를 포함하여, 결국> 대신 코드 중복 문제를 처리하기위한 사용자 컨트롤을 사용

.

+0

스택 오버플로에 오신 것을 환영합니다. 이것은 OP 질문 –

+0

에 대한 답변으로 보이지 않습니다. 사실 일 수도 있지만 관련성이 있습니다. 나는이 대답이 간단하고 유용하다는 것을 알았다. –

관련 문제