Tem 21 2011
Updatepanel Repeater Causes Full Postback
Selamlar,
Bu aralar msdn forumuna vakit ayırıp orada cevap vermeye çalışıyorum. İlginç bir soru ile karşılaştım.
Updatepanel içerisinde kullanılan kontroller full postback yapıyor diye yazıyordu.
Biraz inceledikten sonra ve kendim bir yaptığımda gerçekten full postback yaptığını gördüm.
Google olmasa idi ne yapardık
Arama ile bir kaç örneğe raslatım. Çoğu kişi aynı dertten muzdaripmiş
meğersem. Ama onlardaki çözüm kolay olmuş repeater içerisinde kullandıkları
linkbuttonlara id vererek çözüme ulaşmışlar.
Benim örneğimde ise linkbuttonların zaten idleri vardı. Aklıma repeater bind
ettikten sonra scriptmanagera kontrolleri tek tek RegisterAsyncPostBackControl metodunu
kullanarak register ettim ve sorun çözüldü. Aşağıda bunla ilgili örneğin kod kısımlarını bulabilirsiniz.
<asp:ToolkitScriptManager ID=”ToolkitScriptManager1″ runat=”server”>
</asp:ToolkitScriptManager>
<asp:UpdatePanel runat=”server” ID=”pnlUpdate” ChildrenAsTriggers=”true”>
<ContentTemplate>
<asp:Repeater ID=”rpt” runat=”server”>
<ItemTemplate>
<table>
<tr>
<td>
<%#Eval(“Ad”) %>
</td>
<td>
<asp:LinkButton ID=”btnDelete” runat=”server” CommandName=”Delete” Text=”Kaldır” />
</td>
</tr>
</table>
<asp:ConfirmButtonExtender ID=”cnfrmButtonDelete” runat=”server” DisplayModalPopupID=”mdlPopupDelete”
ConfirmText=”Silmek istediğinize emin misiniz?” Enabled=”true” TargetControlID=”btnDelete”>
</asp:ConfirmButtonExtender>
<asp:ModalPopupExtender ID=”mdlPopupDelete” runat=”server” Enabled=”true” TargetControlID=”btnDelete”
OkControlID=”btnYesDelete” CancelControlID=”btnNoDelete” PopupControlID=”divPopupDelete”>
</asp:ModalPopupExtender>
<asp:Panel ID=”divPopupDelete” runat=”server” CssClass=”mdlPopupContainer”>
Silmek istediğinize emin misiniz?
<asp:LinkButton ID=”btnYesDelete” runat=”server” Text=”Evet” />
<asp:LinkButton ID=”btnNoDelete” runat=”server” Text=”Kapat” />
</asp:Panel>
</ItemTemplate>
</asp:Repeater>
</ContentTemplate>
</asp:UpdatePanel>
Yukarıda sayfanın içerisinde yer alan bir updatepanel içerisindeki repeater ve onun içerisinde duran diğer kontrollerimiz var.
btnDelete basıldığında kontrol amaçlı olarak confirmbuttonextender kullanıldığını göreceksiniz.
Arakda tarafta yaptığımız işlemde aşağıdaki gibidir.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindRep();
}
}
private void BindRep()
{
List<Person> list = new List<Person>();
for (int i = 0; i < 29; i++)
{
list.Add(new Person() { Ad = (i + ” ” + (i * 5)) });
}
rpt.DataSource = list;
rpt.DataBind();
foreach (RepeaterItem ri in rpt.Items)
{
if (ri.ItemType == ListItemType.Item || ri.ItemType == ListItemType.AlternatingItem)
{
LinkButton lb = (LinkButton)ri.FindControl(“btnDelete”);
ToolkitScriptManager1.RegisterAsyncPostBackControl(lb);
}
}
}
}
public class Person
{
public string Ad { get; set; }
}
Umarım işinizi görür.
Bol Kodlu Günlere
Tem 26, 2011 @ 11:00:50
süpersiniz uğur bey