이전 게시물 참조 : Focus lost on partial postback with UserControls inside UpdatePanel 여기서 양식 내의 웹 페이지 컨트롤에 완벽하게 적용됩니다. 그러나 UC를 detailsview 템플릿 필드 (편집 + 삽입 용)에 넣었습니다.UC가 detailsview 컨트롤에 포함되어있을 때 TextChanged 포스트 백 이후에 사용자 정의 컨트롤이 올바르게 유지되지 않습니다.
UC에는 DetailsView의 편집 모드 및 삽입 모드 중에 UC 텍스트 상자 (AutoPostback = True)의 TextChanged 이벤트 다음에 텍스트 서식 및 컨트롤의 스타일을 조정하는 데 필요한 UpdatePanel이 포함되어 있습니다.
마찬가지로 DetailsView 컨트롤이 편집 모드에 있고 사용자가 UC에서 텍스트를 변경하면 textchanged 이벤트가 발생하고 사용자 입력 값의 유효성이 검사되고 OK를 누르면 쉼표 기호 (쉼표) UC 텍스트 상자 텍스트에 추가되지만 포커스는 DetailsView의 다음 필드로 이동하고 QUICKLY는 UC 컨트롤로 돌아갑니다.
포커스 및 탭 순서 이 DetailsView 컨트롤 외부에서 완벽하게 작동하기 때문에 참조 된 게시물에 명시된대로 UC가 업데이트 패널에 래핑 될 때이 잘못된 포커스 이동이 발생하지 않습니다.
다음은 template-field-EDIT (only)에 대한 aspx 마크 업입니다.
<asp:TemplateField HeaderText="Initial Mileage" SortExpression="IMilage">
<EditItemTemplate>
<asp:UpdatePanel ID="updpnlIMilage" runat="server" UpdateMode="Conditional" >
<ContentTemplate>
<TGANumeric:GANumeric ID="ucnumIMileage" runat="server"
Caption="Initial Mileage" HideCaption="True" Width="160"
DisplayMask="999,999" InputMask="999999"
Enabled="True" IsRequired="False"
MinNumber="0" MaxNumber="999999"
Text='<%# Bind("IMilage") %>'
TabIndex="0"
/>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ucnumIMileage" />
</Triggers>
</asp:UpdatePanel>
</EditItemTemplate>
미리 감사드립니다. 귀하의 의견을 환영합니다. 감사 ... J. (부분)
답장을 보내 주셔서 감사합니다. 예. 계층 구조가 정확합니다. 나는 $$ 또는 수천이 될 수있는 숫자 전용 UC를 만들었고 손실 된 포커스 (텍스트가 변경됨)가 TBox에 포맷 된 번호를 배치하기를 원했습니다. Notice $$는 다음과 같은 값을 가질 수 있습니다. 네거티브에 $ 4.561.23 또는 ($ 1,234.56)이고 날짜 값에 대한 다른 UC가 있습니다. 친숙한 날짜 입력에 대한 코딩이 복잡하기 때문에 서버에서 유효성 검사가 필요합니다. 그래서 자바 스크립트를 블러에 사용한다면, 포커스가있는 숫자가 아닌 문자를 제거해야하며 이는 브라우저에 보낼 많은 코드입니다. 귀하의 의견을 환영합니다. 고마워. –
한 가지 문제는 형식이 지정된 텍스트로 텍스트 상자를 수정하면 이전에 유효성이 검사 된 값을 무효화하는 것입니다. 이것은 문제입니다. HTML5 ASP.NET 4+를 쓰고 있습니까? 그렇다면 TextBox.TextMode를 적절한 * type *으로 설정하면 validity checking clientside를 처리합니다 – fnostro
또한 UC를 사용하여 UC 내에 모든 형식 지정 및 유효성 검사 논리를 갖기를 원했습니다. 또한 값이 목적에 맞을 때만 잃어 버린 포커스에서 숫자 나 날짜를 올바르게 표시하기를 원했습니다 ... 미국 날짜는 45883014는 의미가 없지만 0215는 2015 년 2 월 15 일에 유효합니다 (현재 연도 가정 사용자는 2009 년 3 월 15 일에 mmdd 또는 031509 만 입력하고 초점이 맞춰지면 형식이 지정됨). 시간 내 주셔서 감사 드리며 귀하의 의견은 환영합니다 .... jd –