我在这里发布了这个问题,因为这件事实际上在过去的几个星期里只是破坏了我的头脑。我离开了一段时间,但如果可以,我真的会使用那个工具。
我在下拉列表中始终获得通用错误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
还有一个简单的问题 - 您对前端的“类别”属性有什么价值?是数据库标题还是你自己的标题?
答案 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 !真的,用它来调试,真棒。
再次使用调试工具!你不想花费一生的时间来简单地拼错方法:)。