다음을 통해 공유


UpdatePanel을 사용하지 않고 팝업 컨트롤에서 포스트백 처리(C#)

작성자: Christian Wenz

PDF 다운로드

AJAX 컨트롤 도구 키트의 PopupControl 확장기는 다른 컨트롤이 활성화될 때 팝업을 트리거하는 쉬운 방법을 제공합니다. 이러한 패널에서 포스트백이 발생하고 페이지에 여러 패널이 있는 경우 클릭한 패널을 결정하기가 어렵습니다.

개요

AJAX 컨트롤 도구 키트의 PopupControl 확장기는 다른 컨트롤이 활성화될 때 팝업을 트리거하는 쉬운 방법을 제공합니다. 이러한 패널에서 포스트백이 발생하고 페이지에 여러 패널이 있는 경우 클릭한 패널을 결정하기가 어렵습니다.

단계

를 포스트백과 함께 사용 PopupControl 하지만 페이지에 가 UpdatePanel 없으면 제어 도구 키트는 어떤 클라이언트 요소가 팝업을 트리거하여 포스트백을 발생시켰는지 확인하는 방법을 제공하지 않습니다. 그러나 작은 트릭은 이 시나리오에 대한 해결 방법을 제공합니다.

우선, 다음은 기본 설정입니다. 두 텍스트 상자는 모두 동일한 팝업, 달력을 트리거합니다. 두 개의 PopupControlExtenders 텍스트 상자와 팝업이 함께 표시됩니다.

<form id="form1" runat="server">
 <asp:ScriptManager ID="asm" runat="server" />
 <div>
 Departure date: <asp:TextBox ID="tbDeparture" runat="server" />
 Return date: <asp:TextBox ID="tbReturn" runat="server" />
 </div>
 <asp:Panel ID="pnlCalendar" runat="server">
 <asp:Calendar ID="c1" runat="server" OnSelectionChanged="c1_SelectionChanged" />
 </asp:Panel>
 <ajaxToolkit:PopupControlExtender ID="pce1" runat="server"
 TargetControlID="tbDeparture" PopupControlID="pnlCalendar" Position="Bottom" />
 <ajaxToolkit:PopupControlExtender ID="pce2" runat="server"
 TargetControlID="tbReturn" PopupControlID="pnlCalendar" Position="Bottom" />
</form>

기본 아이디어는 팝업을 시작한 텍스트 상자를 포함하는 요소에 <form> 숨겨진 양식 필드를 추가하는 것입니다.

<input type="hidden" id="tbHidden" runat="server" />

페이지가 로드되면 JavaScript 코드는 두 텍스트 상자에 이벤트 처리기를 추가합니다. 사용자가 텍스트 상자를 클릭할 때마다 해당 이름은 숨겨진 양식 필드에 기록됩니다.

<script type="text/javascript">
 function pageLoad()
 {
 $get("tbDeparture").onclick = saveTextBox;
 $get("tbReturn").onclick = saveTextBox;
 }
 function saveTextBox()
 {
 $get("tbHidden").value = this.id;
 }
</script>

서버 쪽 코드에서 숨겨진 필드의 값을 읽어야 합니다. 숨겨진 양식 필드는 조작하기 매우 간단하므로 숨겨진 값의 유효성을 검사하는 안전 목록 접근 방식이 필요합니다. 올바른 텍스트 상자가 식별되면 달력의 날짜가 기록됩니다.

<script runat="server">
 protected void c1_SelectionChanged(object sender, EventArgs e)
 {
 string id = tbHidden.Value;
 if (id == "tbDeparture" || id == "tbReturn")
 {
 TextBox tb = (TextBox)FindControl(id);
 tb.Text = (sender as Calendar).SelectedDate.ToShortDateString();
 }
 }
</script>

사용자가 텍스트 상자를 클릭하면 일정이 나타납니다.

사용자가 텍스트 상자를 클릭하면 일정이 나타납니다(전체 크기 이미지를 보려면 클릭).

날짜를 클릭하면 텍스트 상자에 배치됩니다.

날짜를 클릭하면 텍스트 상자에 배치됩니다(전체 크기 이미지를 보려면 클릭).