Aracılığıyla paylaş


UpdatePanel Olmadan Bir Açılan Denetimden Gelen Geri Göndermeleri İşleme (C#)

Christian Wenz tarafından

PDF’yi İndir

AJAX Denetim Araç Seti'ndeki PopupControl genişleticisi, başka bir denetim etkinleştirildiğinde açılır pencere tetiklemenin kolay bir yolunu sunar. Böyle bir panelde geri gönderme gerçekleştiğinde ve sayfada birkaç panel olduğunda, hangi panele tıklandığını belirlemek zordur.

Genel Bakış

AJAX Denetim Araç Seti'ndeki PopupControl genişleticisi, başka bir denetim etkinleştirildiğinde açılır pencere tetiklemenin kolay bir yolunu sunar. Böyle bir panelde geri gönderme gerçekleştiğinde ve sayfada birkaç panel olduğunda, hangi panele tıklandığını belirlemek zordur.

Adımlar

Bir geri gönderme ile kullanırken PopupControl , ancak sayfada bir UpdatePanel olmadan, Denetim Araç Seti hangi istemci öğesinin geri göndermeye neden olduğunu belirlemek için bir yol sunmaz. Ancak küçük bir püf noktası bu senaryo için geçici bir çözüm sağlar.

Her şeyden önce, temel kurulum şudur: her ikisi de aynı açılan pencere olan bir takvim tetikleyen iki metin kutusu. İki PopupControlExtenders tanesi metin kutularını ve açılan pencereleri bir araya getirir.

<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>

Temel fikir, açılan öğeyi <form> başlatan metin kutusunu tutan öğeye gizli bir form alanı eklemektir:

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

Sayfa yüklendiğinde, JavaScript kodu her iki metin kutusuna da bir olay işleyicisi ekler: Kullanıcı bir metin kutusuna her tıkladığında, adı gizli form alanına yazılır:

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

Sunucu tarafı kodunda gizli alanın değeri okunmalıdır. Gizli form alanlarını işlemek önemsiz olduğundan, gizli değeri doğrulamak için güvenli liste yaklaşımı gerekir. Doğru metin kutusu belirlendikten sonra takvimdeki tarih bu kutuya yazılır.

<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>

Kullanıcı metin kutusuna tıkladığında Takvim görüntülenir

Kullanıcı metin kutusuna tıkladığında Takvim görüntülenir (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Bir tarihe tıklanması, tarihi metin kutusuna yerleştirir

Bir tarihe tıklanması metin kutusuna yerleştirir (Tam boyutlu resmi görüntülemek için tıklayın)