AjaxToolkit 4.0 ASP.NET中的常量错误500级联DropDown列表

时间:2011-08-08 11:39:02

标签: asp.net drop-down-menu

我在这里发布了这个问题,因为这件事实际上在过去的几个星期里只是破坏了我的头脑。我离开了一段时间,但如果可以,我真的会使用那个工具。

我在下拉列表中始终获得通用错误500。

以下是该服务的代码:

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


/// <summary>
/// Summary description for inputHoursWS
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// 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 inputHoursWS : System.Web.Services.WebService {

    public inputHoursWS () {

        //Uncomment the following line if using designed components 
        //InitializeComponent(); 
    }

    [WebMethod]
    public CascadingDropDownNameValue[] getGroupCodes(string knownCategoryValues, 
    string Category)
    {
        InputHoursDSTableAdapters.TMS_ProjectGroupsTableAdapter projectGroupTA = new InputHoursDSTableAdapters.TMS_ProjectGroupsTableAdapter();
        InputHoursDS.TMS_ProjectGroupsDataTable groups = projectGroupTA.GetProjectGroups();

        List<CascadingDropDownNameValue> groupValues = new List<CascadingDropDownNameValue>();

        foreach (DataRow row in groups)
        {

            int groupId = (int)row["ProjectGroupID"];
            string groupCode = (string)row["ProjectGroup"];

            groupValues.Add(new CascadingDropDownNameValue(groupCode, groupId.ToString()));

        }

        return groupValues.ToArray();
    }

 }

以下是前端网络表单的代码:

  <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>

                    <asp:DropDownList ID="ddlGroups" runat="server" Width="70px" Height="21px">
                     </asp:DropDownList>
                     <asp:CascadingDropDown ID="ddlGroups_CascadingDropDown" 
                      runat="server" 
                      TargetControlID="ddlGroups" 
                      Category="ProjectGroup" 
                      PromptText="Choose a Group" 
                      LoadingText="Please wait ..." 
                      ServicePath="inputHoursWS.asmx" 
                      ServiceMethod="getGroupCodes">
                      </asp:CascadingDropDown>

InputHoursDS数据集中的方法正常工作。我正在访问开发机器远程。安装了 Visual Web Developer 2010 ,IIS 6也运行了.NET 4.0

还有一个简单的问题 - 您对前端的“类别”属性有什么价值?是数据库标题还是你自己的标题?

2 个答案:

答案 0 :(得分:2)

我将以下配置添加到web.config文件中解决了问题:

<configuration>

  <!-- ... -->

  <system.web.extensions>
    <scripting>
      <webServices>
        <jsonSerialization maxJsonLength="2147483647"/>
      </webServices>
    </scripting>
  </system.web.extensions>

  <!-- ... -->

</configuration>

我在下拉列表中看到了这个问题,其中列出了特定国家/地区的可用城市。大多数国家我们只定义了几个城市,但有一个城市有数千个;只是那个错误的国家;虽然调试代码看起来很好(因为被调用的方法正在运行并返回结果 - 结果只是大于可接受的大小。修改最大JSON长度消除了这个人为问题。

答案 1 :(得分:0)

好的伙计们, 我想我没有意识到的是数据集没有正确设置,实际上在另一种方法中我混淆了方法名称。

使用 Fiddler 等调试工具。它真的帮助了我。

回答我自己的问题。我的理解是,类别是下一个下拉列表的主键列,knownCategoryValues是前一个键的值。这是实际工作的一部分,所有寻找答案的人都可以使用它:

[WebMethod]
   public CascadingDropDownNameValue[] getGroups(string knownCategoryValues, string category)
  {
    StringDictionary categoryValues =
 AjaxControlToolkit.CascadingDropDown.ParseKnownCategoryValuesString(
 knownCategoryValues);

    int countryID = Convert.ToInt32(categoryValues["ProjectGroupID"]);

    List<CascadingDropDownNameValue> cascadingValues =
        new List<CascadingDropDownNameValue>();

    inputHrsDataSetTableAdapters.TMS_ProjectGroupsTableAdapter projectGroupsTA = new inputHrsDataSetTableAdapters.TMS_ProjectGroupsTableAdapter();


    foreach (DataRow _row in projectGroupsTA.GetProjectGroupCodes())
    {
        cascadingValues.Add(new CascadingDropDownNameValue(_row["ProjectGroup"].ToString(),
            _row["ProjectGroupID"].ToString()));

    }

    return cascadingValues.ToArray();
 }

  [WebMethod]
   public CascadingDropDownNameValue[] getProjectNumbers(string knownCategoryValues, string category)
{
    StringDictionary categoryValues =
 AjaxControlToolkit.CascadingDropDown.ParseKnownCategoryValuesString(
 knownCategoryValues);

    int GroupaID = Convert.ToInt32(categoryValues["ProjectGroupID"]);

    List<CascadingDropDownNameValue> cascadingValues =
        new List<CascadingDropDownNameValue>();

    inputHrsDataSetTableAdapters.TMS_ProjectRegisterTableAdapter projectRegisterTA = new inputHrsDataSetTableAdapters.TMS_ProjectRegisterTableAdapter();


    foreach (DataRow _row in projectRegisterTA.GetProjectNumbersFromGroupID(GroupaID))
    {
        cascadingValues.Add(new CascadingDropDownNameValue(_row["ProjectNumber"].ToString(),
            _row["ProjectNumber"].ToString()));

    }

    return cascadingValues.ToArray();

 }

另外:

 <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>

                                   <asp:DropDownList ID="ddlGroupCodes" runat="server" Height="21px" Width="70px" />

                                   <asp:CascadingDropDown ID="ddlGroupCodes_CascadingDropDown" runat="server" 
                                       TargetControlID="ddlGroupCodes" 
                                       Category="ProjectGroupID"
                                        ServicePath="~/GroupService.asmx"
                                        ServiceMethod="getGroups" 
                                        PromptText="Select Group"
                                         LoadingText="Loading...">
                                   </asp:CascadingDropDown>

                                    <asp:DropDownList ID="ddlProjectNumbers" runat="server" Height="21px" Width="85px" />

                                   <asp:CascadingDropDown ID="ddlProjectNumbers_CascadingDropDown" runat="server" 
                                       TargetControlID="ddlProjectNumbers" 
                                       Category="ProjectNumber"
                                        ServicePath="~/GroupService.asmx"
                                        ServiceMethod="getProjectNumbers" 
                                        PromptText="Select Project No."
                                         LoadingText="Loading..." ParentControlID="ddlGroupCodes">
                                   </asp:CascadingDropDown>

非常感谢 Fiddler !真的,用它来调试,真棒。

再次使用调试工具!你不想花费一生的时间来简单地拼错方法:)。