CascadingDropDown ile Otomatik Geri Gönderme Kullanma (C#)
Christian Wenz tarafından
AJAX Denetim Araç Seti'ndeki CascadingDropDown denetimi, DropDownList denetimini genişleterek bir DropDownList'teki değişikliklerin ilişkili değerleri başka bir DropDownList'e yüklemesini sağlar. Ancak CascadingDropDown denetimini kullanırken ASP. Net'in DropDownList denetiminin AutoPostBack özelliği çalışmıyor, çünkü verileri listeye zaman uyumsuz olarak yüklemek (gereksiz) bir geri gönderme oluşturur. Bazı JavaScript kodlarıyla bu etki önlenebilir.
Genel Bakış
AJAX Denetim Araç Seti'ndeki CascadingDropDown denetimi, DropDownList denetimini genişleterek bir DropDownList'teki değişikliklerin ilişkili değerleri başka bir DropDownList'e yüklemesini sağlar. (Örneğin, bir liste ABD eyaletlerinin listesini sağlar ve bir sonraki liste de bu eyaletteki büyük şehirlerle doldurulur.) Ancak CascadingDropDown denetimini kullanırken ASP. Net'in DropDownList denetiminin AutoPostBack özelliği çalışmıyor, çünkü verileri listeye zaman uyumsuz olarak yüklemek (gereksiz) bir geri gönderme oluşturur. Bazı JavaScript kodlarıyla bu etki önlenebilir.
Adımlar
ASP.NET AJAX ve Denetim Araç Seti'nin işlevselliğini etkinleştirmek için, ScriptManager
denetim sayfanın herhangi bir yerine (ancak öğesi içinde <form
> ) yerleştirilmelidir:
<asp:ScriptManager ID="asm" runat="server" />
Ardından DropDownList denetimi gerekir:
<div>
Vendor: <asp:DropDownList ID="VendorsList" runat="server"/>
</div>
Bu liste için, web hizmeti URL'si ve yöntem bilgileri sağlayan bir CascadingDropDown genişleticisi eklenir:
<ajaxToolkit:CascadingDropDown ID="ccd1" runat="server"
ServicePath="CascadingDropdown3.cs.asmx" ServiceMethod="GetVendors"
TargetControlID="VendorsList" Category="Vendor" />
CascadingDropDown genişleticisi daha sonra aşağıdaki yöntem imzası ile bir web hizmetini zaman uyumsuz olarak çağırır:
public CascadingDropDownNameValue[] MethodNameHere(string knownCategoryValues, string category)
yöntemi CascadingDropDown değeri türünde bir dizi döndürür. Türün oluşturucu, önce liste girişinin başlık sonra da değerini (HTML value
özniteliği) bekler.
<%@ WebService Language="C#" Class="CascadingDropdown3" %>
using System.Web.Script.Services;
using AjaxControlToolkit;
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Collections.Generic;
[ScriptService]
public class CascadingDropdown3 : System.Web.Services.WebService
{
[WebMethod]
public CascadingDropDownNameValue[] GetVendors(string knownCategoryValues,
string category)
{
List<CascadingDropDownNameValue> l = new List<CascadingDropDownNameValue>();
l.Add(new CascadingDropDownNameValue("International", "1"));
l.Add(new CascadingDropDownNameValue("Electronic Bike Repairs & Supplies", "2"));
l.Add(new CascadingDropDownNameValue("Premier Sport, Inc.", "3"));
return l.ToArray();
}
}
Sayfayı tarayıcıda yüklemek, açılan listeyi üç satıcıyla doldurur ve ikincisi önceden seçilir. Ayrıca ASP.NET JavaScript yöntemini tanımlar __doPostBack()
. Sayfa yüklendikten sonra, bu JavaScript çağrısı açılan listeye eklenir, ancak yalnızca içinde öğeler varsa. Listede öğe yoksa, Denetim Araç Seti şu anda bunları yüklüyordur, bu nedenle JavaScript kodu bir zaman aşımı kullanır ve yarım saniye içinde yeniden dener.
<script type="text/javascript">
function pageLoad()
{
addAutoPostBack();
}
function addAutoPostBack()
{
if ($get("VendorsList").options.length > 0)
{
$get("VendorsList").setAttribute("onchange","javascript:setTimeout('__doPostBack(\\'VendorsList\\',\\'\\')', 0)");
}
else
{
setTimeout("addAutoPostBack()", 500);
}
}
</script>
Bu şekilde, geri gönderme yalnızca listede gerçekten öğeler olduğunda ve kullanıcı bir girdi seçtiğinde yürütülür.
Liste öğesinin seçilmesi geri göndermeye neden olur (Tam boyutlu görüntüyü görüntülemek için tıklayın)