1

Ajax Cascading DropDown を使用して、WebService を使用して DropDownList のデータを入力する Web フォームを開発しています。IIS Express の独自のインスタンスを使用して VS でデバッグしている間、それは魅力的に機能しました。IIS を localhost にインストールして完全なテストを実行すると、Chrome では「未定義」の値がドロップダウンに入力され、IE では空白のフィールドが入力されます。

以下に完全なコードを示します。フォームと WebService の両方が Query という名前のフォルダーにあります。CascadingDropDown のパスを確認しました。他の値に変更すると、フィールドはメソッド 500 エラーを返します。したがって、このエラーはスローされないため、使用するパスは正しいです。

コードでは、「NoValidationDropDown」に出くわしますが、これは無視してください。これはエラーの原因ではなく、検証のバイパスのみを許可します。

WebConfig に変更を加えていません。WebServices が機能するためにこれが重要かどうか教えてください。SQL Express サーバー データベース インスタンスへの TCP/IP 接続を許可しました。

これは私のフォーム ページ (Data_selector.aspx) からの抜粋です。

<asp:Panel ID="Panel3" runat="server">
        <p>
            <b>Query Type</b><br />
            <asp:NoValidationDropDown ID="ddlquery" runat="server"/>
            <%--<asp:DropDownList ID="ddlquery" runat="server"/>--%>
            <ajaxtoolkit:CascadingDropDown ID="ccdquery" runat="server" Category="QueryType" TargetControlID="ddlquery"
            PromptText="Please select a query" LoadingText="Loading data" ServiceMethod="BindQueryType" ServicePath="~/Query/DropDownWebService.asmx"/>
        </p>
        <p>
            <b>Specify query type</b><br />
             <asp:NoValidationDropDown ID="ddlitem" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlitem_SelectedIndexChanged"/>
            <%--<asp:DropDownList ID="ddlitem" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlitem_SelectedIndexChanged"/>--%>
            <ajaxtoolkit:CascadingDropDown ID="ccditem" runat="server" Category="ItemType" TargetControlID="ddlitem" ParentControlID="ddlquery"
            PromptText="Please specify query type" LoadingText="Loading data" ServiceMethod="BindItemType" ServicePath="~/Query/DropDownWebService.asmx"/>
        </p>
        <p>

これは、私の WebService.cs ファイルからの抜粋です。

using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Configuration;
using AjaxControlToolkit;
using System.Web.Services;
using System;
using System.Text;
using System.Web.Script.Services;
using System.Web.Services.Protocols;

/// <summary>
/// Summary description for CascadingDropdown
/// </summary>
[WebService(Namespace = "NewWebApp")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService()]
public class DropDownWebService : System.Web.Services.WebService
{
    //Database connection string
    private static string strconnection = System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
    //database connection
    SqlConnection conquery = new SqlConnection(strconnection);
    public DropDownWebService()
    {

        //Uncomment the following line if using designed components
        //InitializeComponent();
    }
    /// <summary>
    /// WebMethod to Populate Query Dropdown
    /// </summary>
    [WebMethod]
    public CascadingDropDownNameValue[] BindQueryType(string knownCategoryValues, string category)
    {
        conquery.Open();
        SqlCommand cmdquery = new SqlCommand("SELECT * from QueryTypes", conquery);
        cmdquery.ExecuteNonQuery();
        SqlDataAdapter daquery = new SqlDataAdapter(cmdquery);
        DataSet dsquery = new DataSet();
        daquery.Fill(dsquery);
        conquery.Close();
        //create list and add items in it by looping through dataset table
        List<CascadingDropDownNameValue> querydetails = new List<CascadingDropDownNameValue>();
        foreach (DataRow dtrow in dsquery.Tables[0].Rows)
        {
            string Id = dtrow["Id"].ToString();
            string Query = dtrow["Query"].ToString();
            querydetails.Add(new CascadingDropDownNameValue(Query, Id));
        }
        return querydetails.ToArray();
    }
    /// <summary>
    /// WebMethod to Populate Item Dropdown
    /// </summary>
    [WebMethod]
    public CascadingDropDownNameValue[] BindItemType(string knownCategoryValues, string category)
    {
        //int Id;
        //This method will return a StringDictionary containing the name/value pairs of the currently selected values
        StringDictionary querydetails = AjaxControlToolkit.CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
        string Id = querydetails["QueryType"].ToString();
        conquery.Open();
        SqlCommand cmditem = new SqlCommand("SELECT Id, Item from ItemTypes where QueryId=@QueryId", conquery);
        cmditem.Parameters.AddWithValue("@QueryId", Id);
        cmditem.ExecuteNonQuery();
        SqlDataAdapter daitem = new SqlDataAdapter(cmditem);
        DataSet dsitem = new DataSet();
        daitem.Fill(dsitem);
        conquery.Close();

        //create list and add items in it by looping through dataset table
        List<CascadingDropDownNameValue> itemdetails = new List<CascadingDropDownNameValue>();
        foreach (DataRow dtrow in dsitem.Tables[0].Rows)
        {
            string ItemId = dtrow["Id"].ToString();
            string Item = dtrow["Item"].ToString();
            itemdetails.Add(new CascadingDropDownNameValue(Item, ItemId));
        }
        return itemdetails.ToArray();
    }
}

そして、ここに私の WebService.asmx ファイルがあります:

<%@ WebService Language="C#" Class="DropDownWebService" CodeBehind="~/Query/DropDownWebService.cs" %>

コメントありがとうございます!

4

0 に答える 0