【问题标题】:WCF Service not loading drop downWCF 服务未加载下拉菜单
【发布时间】:2019-06-08 21:13:15
【问题描述】:

我有一个 wcf 服务,用于在 IIS 7 的 ASPX 页面中填充级联下拉列表。下拉列表有数千个空选项标签,但没有数据。该服务不会引发错误。整个解决方案在桌面 IDE 中运行,但在 IIS 上部署时服务无法正常工作。我怀疑这是一个 IIS 问题,但无法识别。

<snippet from aspx page>
<asp:DropDownList ID="ddCommercialServicesSiteName" runat="server" Width="150"></asp:DropDownList>
<ajaxToolkit:CascadingDropDown 
    ID="cddCommercialServicesSiteName" TargetControlID="ddCommercialServicesSiteName" 
    PromptText="Select" PromptValue=""   Category="siteID" 
    ServicePath="~/ServiceDropDown.svc" ServiceMethod="GetCommercialSites"
    LoadingText ="Loading..."  runat="server"/>


<!-- ServiceDropDown.svc code  -->
<%@ ServiceHost Language="C#" Debug="true" Service="ReportDashboard.ServiceDropDown" CodeBehind="ServiceDropDown.svc.cs" %>

public List GetCommercialSites(string knownCategoryValues, string contextKey)

{ 列出网站 = new List();

if (contextKey == null)

{

return sites;

} string query = @"select DISTINCT ContactName AS Site , id from sites";

SqlCommand cmd = new SqlCommand(query);

using (SqlConnection con = new SqlConnection(conString))

{
con.Open();

cmd.Connection = con;

cmd.Parameters.Add("@account", SqlDbType.VarChar).Value = contextKey.ToString();

using (SqlDataReader reader = cmd.ExecuteReader())

{

    while (reader.Read())

    {

        sites.Add(new CascadingDropDownNameValue
        {
            name = reader[0].ToString(),
            value = reader[1].ToString(),
        });

    }

    reader.Close();

    con.Close();

}

}

return sites;

}

【问题讨论】:

  • 我认为这与您的问题无关,但@account 参数是做什么用的?您的查询似乎没有使用它。至于你的问题,你说的是 sites.Add 被调用了数千次,但每次的名称和值都是空白的?您是否已对其进行调试以查看查询返回的内容?
  • 格式化时出错。我丢失了查询 where 子句。应该是 "where account = @account.
  • 如果我单步执行该函数,它会返回适当的项目数,例如 5。但是当呈现页面时,下拉列表有大约 2300 个空白选项标签。因此,在将列表移交给 asp 引擎之间进行一些操作,但我不知道如何在服务器上进行调试。

标签: c# asp.net wcf iis cascadingdropdown


【解决方案1】:

尝试这种方法从阅读器中检索值。

List<MyModelClass> result = new List<MyModelClass>();



while (reader.Read())

{

            object[] values = new object[3];

            reader.GetValues(values);



            MyModelClass model = new MyModelClass();



            model.ID = values[0].ToString();

            model.ValueProperty = values[1].ToString();

            model.ValueProperty2 = values[2].ToString();



            result.Add(model);

}

在您的 View/aspx 中运行一个 jQuery 来填充您的下拉列表,

                            $("#dropdown").change(function () {

                                            dropdown.append($("<option></option>").val("").html("Please wait ..."));



                                            $.ajax({

                                                            url: "/api/CascadingData/GetSomeData/",

                                                            type: "GET",

                                                            dataType: "json",

                                                            data: { Id: Id },

                                                            success: function (d) {

                                                                            dropdown.empty(); // Clear the list, including the please wait option

                                                                            dropdown.append($("<option></option>").val('').html("Select an option..."));

                                                                            $.each(d, function (i, ModelObject) {

                                                                                            dropdown.append($("<option></option>").val(ModelObject.Name).html(ModelObject.Value));

                                                                            });

                                                            },

                                                            error: function () {

                                                                            alert("Error in $('#dropdown').change!");

                                                            }

                                            });

                            }

【讨论】:

  • 感谢您的建议 这不起作用。 ajaxToolkit:CascadingDropDown 需要一个列表。我确实测试了这个方法,有趣的是,下拉列表填充了正确数量的选项标签,但它们显示为空选项。 问题出在它工作的 IDE 中。在服务器上它没有。
  • 我在上面修改了我的答案。使用您的模型类列表并使用 jQuery 填充下拉列表
猜你喜欢
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2020-03-03
  • 1970-01-01
  • 2015-08-08
  • 2019-02-06
  • 1970-01-01
  • 2018-08-04
相关资源
最近更新 更多