Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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ışmaz, çünkü verileri listeye zaman uyumsuz olarak yüklemek bir geri göndermenin kendisini (gereksiz) 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ışmaz, çünkü verileri listeye zaman uyumsuz olarak yüklemek bir geri göndermenin kendisini (gereksiz) 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, denetimin ScriptManager sayfanın herhangi bir yerine (ancak öğesinin <form> içine) konması gerekir:
<asp:ScriptManager ID="asm" runat="server" />
Ardından DropDownList denetimi gereklidir:
<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.vb.asmx" ServiceMethod="GetVendors"
TargetControlID="VendorsList" Category="Vendor" />
CascadingDropDown genişleticisi daha sonra aşağıdaki yöntem imzasıyla zaman uyumsuz olarak bir web hizmetini çağırır:
Public Function MethodNameHere(ByVal knownCategoryValues As String, ByVal category As String) As CascadingDropDownNameValue()
yöntemi CascadingDropDown değeri türünde bir dizi döndürür. Türün oluşturucusunun önce liste girdisinin başlık ardından değeri (HTML value özniteliği) beklemesi gerekir.
<%@ WebService Language="VB" Class="CascadingDropDown3" %>
Imports System.Web.Script.Services
Imports AjaxControlToolkit
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Collections.Generic
<ScriptService()> _
Public Class CascadingDropDown3
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function GetVendors(ByVal knownCategoryValues As String, ByVal category As String) As CascadingDropDownNameValue()
Dim l As New List(Of 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()
End Function
End Class
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 oluyor (Tam boyutlu görüntüyü görüntülemek için tıklayın)