【问题标题】:Constant Error 500 Cascading DropDown Lists in AjaxToolkit 4.0 ASP.NETAjaxToolkit 4.0 ASP.NET 中的常量错误 500 级联下拉列表
【发布时间】:2011-08-08 11:39:01
【问题描述】:

我在这里发布这个问题,因为这件事实际上在过去的几周里让我很头疼。我把它放了一段时间,但如果可以的话,我真的会使用那个工具。

我总是在下拉菜单中看到通用错误 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

还有一个相关的快速问题 - 您在前端的“Category”属性中添加了什么值?它是来自数据库标题还是您自己的标题?

【问题讨论】:

    标签: asp.net drop-down-menu


    【解决方案1】:

    对我来说,将以下配置添加到我的 web.config 文件解决了这个问题:

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

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

    【讨论】:

      【解决方案2】:

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

      使用调试工具,例如 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,一切顺利!真的,用它来调试,太棒了。

      再次使用调试工具!!!您不想在一个简单的方法拼写错误上花费一生的时间:)。

      【讨论】:

        猜你喜欢
        • 2013-05-02
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 2014-01-12
        • 2014-10-23
        • 1970-01-01
        • 2014-05-22
        • 2016-04-13
        相关资源
        最近更新 更多