Microsoft ASP.NET AJAX çerçevesini kullanarak basamaklı açılan liste oluşturma adımları
Bu makalede, ASP.NET AJAX çerçevesini kullanarak basamaklı bir açılan listenin nasıl derlenmesi gösterilmektedir.
Orijinal ürün sürümü: .NET Framework 3.5
Özgün KB numarası: 976156
Giriş
Not
ASP.NET AJAX özelliklerini kullanmak için .NET Framework 3.5 yüklü olmalıdır. .NET Framework 2.0'da ASP.NET AJAX özelliklerini birleştirmek istiyorsanız, ASP.NET 2.0 AJAX Uzantıları 1.0 yüklü olmalıdır.
Basamaklı açılan liste, bir denetimin üst veya önceki DropDownList
denetimlere bağımlı olduğu DropDownList
bir dizi bağımlı DropDownList
denetimdir. Denetimdeki DropDownList
öğeler, kullanıcı tarafından başka DropDownList
bir denetimden seçilen bir öğeye göre doldurulur. Üst DropDownList
denetimin seçimi değiştiğinde, web sayfası AJAX Web hizmetini çağırarak alt DropDownList
denetimin değerlerinin listesini alır. ASP.NET AJAX çerçevesi, istemci betiklerini kullanarak web hizmetlerini (.asmx dosyaları) tarayıcıdan çağırmanızı sağlar. Bu nedenle, üst DropDownList
denetimin istemci tarafı onchange
olayında Web hizmetini çağırdığınızda, Web sayfası yalnızca alt DropDownList
denetimin öğelerini doldurmak için kısmen yenilenir.
Not
ASP.NET AJAX Denetim Araç Seti, CascadingDropDown
ASP.NET AJAX genişletici olarak bir denetim sağlar. Denetimi kullanarak CascadingDropDown
basamaklı bir açılan liste oluşturabilirsiniz. Bu makalede, basamaklı açılan işlevi elde etmek için ASP.NET ASP.NET AJAX çerçevesiyle birlikte standart DropDownList
denetimin nasıl kullanılacağı açıklanır.
Basamaklı açılan liste oluşturma adımları
Visual Studio'da bir ASP.NET Web Hizmeti uygulaması oluşturun.
Not
Sağlanan örnek kodda, C# örnek projesinin proje adı KB_CascadingDDL_CS. Visual Basic .NET örnek projesinin proje adı KB_CascadingDDL_VB.
Projeye bir AJAX Web Formu ekleyin.
Not
Örnek kodda, Web formunun dosya adı Default.aspx. AJAX Web hizmeti adı WebService'tir.
AJAX Web hizmeti için WebServiceName.asmx dosyasını açın ve sınıf bildiriminin açıklama işaretini aşağıdaki gibi kaldırın.
Visual Basic
<System.Web.Script.Services.ScriptService()> Public Class WebService
Visual C#
[System.Web.Script.Services.ScriptService] public class WebService : System.Web.Services.WebService
Not
Bu adım, AJAX Web hizmetine istemci tarafı betiklerinden erişilmesine olanak tanır. Bir AJAX Web hizmeti sınıfı özniteliğinin
ScriptServiceAttribute
uygulanmış olması ve istemci tarafı betiklerinden çağrılacak tek tek yöntemlerin özniteliğininWebMethodAttribute
uygulanmış olması gerekir.Web formunun WebFormName.aspx dosyasını açın ve asp:ScriptManager> etiketini aşağıdaki gibi değiştirin<:
<asp:ScriptManager ID="ScriptManager1" runat="server"> <Services> <asp:ServiceReference Path="~/WebServiceName.asmx" /> </Services> </asp:ScriptManager>
AJAX Web hizmetinin bir ASP.NET Web formundaki istemci tarafı betiklerinden çağrılmasını sağlamak için, önce Web sayfasına bir
ScriptManager
denetim eklemeniz gerekir. Ardından, etikete bir<asp:ServiceReference>
alt öğe<asp:ScriptManager>
ekleyerek Web hizmetine başvurun. etiketinde<asp:ScriptManager>
özniteliğiniPath
Web hizmeti dosyasına işaret etmek için ayarlayın.ServiceReference
nesnesi, ASP.NET 2.0 AJAX uzantılarına, Web sayfasındaki istemci tarafı betiklerinden belirtilen Web hizmetini çağırmak için bir JavaScript proxy sınıfı oluşturmasını bildirir. Proxy sınıfı, AJAX Web hizmetindeki her Web Hizmeti yöntemine karşılık gelen yöntemlere sahiptir. Web sayfası, giriş parametreleri olarak kullanılan veya Web Hizmeti yöntemleri için değer döndüren sunucu veri türlerine karşılık gelen JavaScript proxy sınıflarını da içerir. Bu proxy sınıfları, bu parametreleri başlatan istemci tarafı betikleri yazmanızı ve bunları Web Hizmeti yöntem çağrısına geçirmenizi sağlar.EnableEventValidation
Aşağıdaki örnekte gösterildiği gibi, WebFormName.aspx dosyasının kaynak kodunda Web sayfasının özelliğini false olarak ayarlayın.<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="KB_CascadingDDL_VB._Default" EnableEventValidation="false" %>
Not
Bu adım, Web Hizmeti yöntem çağrılarını kullanırken geçersiz geri göndermeyi önlemektir.
Gerekli ASP.NET denetimlerini oluşturmak için asp:ScriptManager> etiketinin altına <aşağıdaki kodu ekleyin.
<table> <tr> <td> Make: </td> <td> <asp:DropDownList ID="ddlMake" Width="200" runat="server" AutoPostBack="false" onchange="ddl_changed(this)" /> </td> </tr> <tr> <td> Model: </td> <td> <asp:DropDownList ID="ddlModel" Width="200" runat="server" AutoPostBack="false" onchange="ddl_changed(this)" /> </td> </tr> <tr> <td> Color: </td> <td> <asp:DropDownList ID="ddlColor" Width="200" runat="server" AutoPostBack="false" onchange="DisplayResult()" /> </td> </tr> <tr> <td> <asp:Button ID="btnReset" runat="server" Text="Reset" /> </td> </tr> </table> <a id="aResult" />
AJAX Web hizmeti için Web Hizmeti yöntemleri oluşturun. Aşağıdaki kodu kopyalayıp WebServiceName.asmx dosyasına yapıştırın.
Visual Basic
Imports System.Web.Services Imports System.Web.Services.Protocols Imports System.ComponentModel ' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. <System.Web.Script.Services.ScriptService()> _ <System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _ <System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ <ToolboxItem(False)> _ Public Class WebService Inherits System.Web.Services.WebService <WebMethod()> _ Public Function GetMakeValue() As String() Return New String() {"Please select", "Ford", "Dodge"} End Function <WebMethod()> _ Public Function GetChildValue(ByVal parentID As String, ByVal parentValue As String) As String() If parentValue = "Please select" Then Return Nothing End If Dim values As String() If parentID = "ddlMake" Then If parentValue = "Ford" Then values = New String() {"Please select", "Explorer", "F150", "Mustang"} ElseIf parentValue = "Dodge" Then values = New String() {"Please select", "Durango", "Dakota", "Viper"} Else Return New String() {"Invalid Make value!"} End If ElseIf parentID = "ddlModel" Then Select Case parentValue Case "Explorer", "Dakota", "Viper" values = New String() {"Please select", "Black", "Green", "Yellow"} Case "Durango", "F150", "Mustang" values = New String() {"Please select", "White", "Red", "Blue"} Case Else values = New String() {"Invalid Model value!"} End Select Else Return New String() {"Invalid Category value!"} End If Return values End Function End Class
Visual C#
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; namespace KB_CascadingDDL_CS { /// <summary> /// Summary description for WebService /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. [System.Web.Script.Services.ScriptService] public class WebService : System.Web.Services.WebService { [WebMethod()] public string[] GetMakeValue() { return new string[] { "Please select", "Ford", "Dodge" }; } [WebMethod()] public string[] GetChildValue(string parentID, string parentValue) { if (parentValue == "Please select") { return null; } string[] values; if (parentID == "ddlMake") { if (parentValue == "Ford") { values = new string[] { "Please select", "Explorer", "F150", "Mustang" }; } else if (parentValue == "Dodge") { values = new string[] { "Please select", "Durango", "Dakota", "Viper" }; } else { return new string[] { "Invalid Make value!" }; } } else if (parentID == "ddlModel") { switch (parentValue) { case "Explorer": case "Dakota": case "Viper": values = new string[] { "Please select", "Black", "Green", "Yellow" }; break; case "Durango": case "F150": case "Mustang": values = new string[] { "Please select", "White", "Red", "Blue" }; break; default: values = new string[] { "Invalid Model value!" }; break; } } else { return new string[] { "Invalid Category value!" }; } return values; } } }
İstemci tarafı betiklerinden AJAX Web hizmeti için Web Hizmeti yöntemlerini çağırın. Aşağıdaki kodu kopyalayıp 6. adımda eklediğiniz kodun altına yapıştırın.
<script type="text/javascript"> function pageLoad() { // call a Web service method with no parameters and the user context. KB_CascadingDDL_VB.WebService.GetMakeValue(SucceededCallbackWithContext, FailedCallback, "fillMake"); } // Event handler for ddlMake and ddlModel. // This function calls a Web service method // passing simple type parameters and the user context. function ddl_changed(sender) { // This initiates the call to the server-side method in your code-behind // The parameters are as follows: // 1st : Specify all the parameters expected by your code-behind method // (in this case there are 2: parentControl's ID, parentControl's selected text) // 2nd : Specify a callback method when the call succeeds // 3rd : Specify a callback method when the call fails(optional) // 4th : Specify a user context object (option - not shown) // (in this case we need to assign the parentControl's ID as the user context) KB_CascadingDDL_VB.WebService.GetChildValue(sender.id, sender[sender.selectedIndex].text, SucceededCallbackWithContext, FailedCallback, sender.id); } // This is the callback function called if the // Web service succeeded. It accepts the result // object, the user context, and the method name as // parameters. function SucceededCallbackWithContext(result, userContext) { if (userContext == "fillMake") { //fill the Make var ddl = $get('ddlMake'); } else if (userContext == "ddlMake") { // fill the Model var ddl = $get('ddlModel'); $get('ddlColor').options.length = 0; } else if (userContext == "ddlModel") { // fill the Color var ddl = $get('ddlColor'); } // clear the options ddl.options.length = 0; if (result) { var i = 0; for (var item in result) { // item is the key, result[item] is the value ddl.options.add(new Option(result[item], item)); i++; } } else { alert("Invalid! Please reset the selection!"); $get(userContext).focus(); } } // This is the callback function called if the // Web service failed. It accepts the error object // as a parameter. function FailedCallback(error) { if (error) { alert(error.get_message()); } else alert("An unexpeceted error occurred"); } //This the function to show the three DropDownLists'selection function DisplayResult() { $get("aResult").innerHTML = "You have selected a " + $get("ddlMake")[$get("ddlMake").selectedIndex].text + "," + $get("ddlModel")[$get("ddlModel").selectedIndex].text + "," + $get("ddlColor")[$get("ddlColor").selectedIndex].text + " car!"; } </script>
Bir betikten Web hizmeti yöntemini çağırmak zaman uyumsuzdur. Dönüş değeri almak veya isteğin ne zaman döndürüleceğini belirlemek için başarılı bir geri çağırma işlevi sağlamanız gerekir. İstek başarıyla tamamlandığında geri çağırma işlevi çağrılır ve Web Hizmeti Yöntemi çağrısından döndürülen değeri içerir. Hataları işlemek için başarısız bir geri çağırma işlevi de sağlayabilirsiniz. Ayrıca, geri çağırma işlevlerinde kullanmak üzere kullanıcı bağlam bilgilerini geçirebilirsiniz.
AJAX Web hizmetinde bir Web Hizmeti yöntemini aşağıdaki biçimde çağırabilirsiniz:
theServiceNameSpace.WebServiceName.ServiceMethodName(parameters, SucceededCallbackFunctionName, FailedCallbackFunctionName, userContextString);
Birden çok Web hizmeti yöntemi çağrısından çağrılan tek bir başarılı geri çağırma işlevi sağlayabilirsiniz. İşlevin farklı çağıranları ayırt edebilmesini sağlamak için kullanıcı bağlam bilgilerini parametresindeki işleve geçirebilirsiniz.
Projeyi oluşturun.
Başvurular
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin