我有一个c#cascadingdropdown在本地调试和在实时服务器上以调试模式完美地工作,但是当我通过浏览器实时查看页面时,我得到了[方法错误500]。如果我单击第一个下拉[方法错误500],然后使用[方法错误500]填充第二个下拉列表。
这是ASPX代码:
<asp:DdlNoEventValidation ID="ddlWasteTypeList" runat="server" />
<asp:DdlNoEventValidation ID="ddlBinTypeList" runat="server" />
<asp:CustomValidator
ID="CustomValidator1" runat="server"
ControlToValidate="ddlBinTypeList"
OnServerValidate="CustomValidatorBinType_ServerValidate"
ValidateEmptyText="True"
>
</asp:CustomValidator>
<asp:CascadingDropDown ID="ccd1" runat="server"
ServicePath="WasteDropDown.asmx"
ServiceMethod="GetWaste"
TargetControlID="ddlWasteTypeList"
Category="Waste"
PromptText="select waste" LoadingText="[Loading waste...]"
/>
<asp:CascadingDropDown ID="ccd2" runat="server"
ServicePath="WasteDropDown.asmx"
ServiceMethod="GetBinType"
TargetControlID="ddlBinTypeList"
ParentControlID="ddlWasteTypeList"
Category="BinType"
PromptText="select bin" LoadingText="[Loading bins...]"
/>
这是后面的asmx代码:
[ScriptService]
public class WasteDropDown : System.Web.Services.WebService
{
[WebMethod]
public CascadingDropDownNameValue[] GetBinType(string knownCategoryValues, string category)
{
int wtID;
StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
if (!kv.ContainsKey("Waste") || !Int32.TryParse(kv["Waste"], out wtID))
{
throw new ArgumentException("Couldn't find waste type.");
};
SqlConnection conn = new SqlConnection(myConn.conn);
conn.Open();
SqlCommand comm;
comm = new SqlCommand("dbo.sl_TLU", conn);
comm.CommandType = CommandType.StoredProcedure;
comm.Parameters.Add(new SqlParameter("@binWTID", SqlDbType.Int));
comm.Parameters["@binWTID"].Value = wtID;
SqlDataReader dr = comm.ExecuteReader();
List<CascadingDropDownNameValue> l = new List<CascadingDropDownNameValue>();
while (dr.Read())
{
l.Add(new CascadingDropDownNameValue(
dr["bT"].ToString(),
dr["bPLUID"].ToString()));
}
conn.Close();
return l.ToArray();
}
[WebMethod]
public CascadingDropDownNameValue[] GetWaste(string knownCategoryValues, string category)
{
SqlConnection conn = new SqlConnection(myConn.conn);
conn.Open();
SqlCommand comm;
comm = new SqlCommand("dbo.sl_binQWT", conn);
comm.CommandType = CommandType.StoredProcedure;
SqlDataReader dr = comm.ExecuteReader();
List<CascadingDropDownNameValue> l = new List<CascadingDropDownNameValue>();
while (dr.Read())
{
l.Add(new CascadingDropDownNameValue(
dr["binWT"].ToString(),
dr["wtID"].ToString()));
}
conn.Close();
return l.ToArray();
}
}
日志中没有ASP.Net错误。但是,我有一个类似的ccd在不同网站上的同一台服务器上运行,并且运行完美 - 非常令人沮丧。
我确实看过this Stackoverflow question,但说实话我并没有得到解决方案的内容 - 尽管我在bin文件夹中似乎没有任何重复的dll。我真的认为这个问题在某处。
我已经仔细检查了SQL查询,它们都返回数据。
有什么建议吗?我已经用光了!
修改
我已经设置了失败的请求跟踪并获得了非常有用的结果:
MODULE_SET_RESPONSE_ERROR_STATUS 警告 模块名= “ManagedPipelineHandler”, Notification =“MAP_REQUEST_HANDLER”,HttpStatus =“500”, HttpReason =“内部服务器错误”,HttpSubStatus =“0”,ErrorCode =“The 操作成功完成。 (0x0)“,ConfigExceptionInfo =”“警告
为/wastedropdown.asmx/getwaste和wastedropdown.asmx / getbintype
生成了同样的错误希望这对某人意味着什么!
EDIT2:
代码绝对可以在同一台服务器上的其他网站上正常运行。我得到Fiddler,得到以下错误:
{“消息”:“试图调用该方法 \ u0027GetWaste \ u0027使用GET请求,但不是 允许。“,”StackTrace“:”at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData,HttpContext context)\ r \ n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext的 context,WebServiceMethodData methodData)”, “ExceptionType”: “System.InvalidOperationException”}
HELP!
答案 0 :(得分:1)
我认为这是因为您获得的数据太大了。您必须将以下代码添加到web.config中:
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="5000000" />
</webServices>
</scripting>
</system.web.extensions>
此致
答案 1 :(得分:0)
结帐链接: Method Error 500 http://www.codeproject.com/Questions/201182/Method-Error-500-on-cascading-dropdownlist
您可以获得此类错误的信息: http://msdn.microsoft.com/en-us/library/windows/desktop/ms681388(v=vs.85).aspx
答案 2 :(得分:0)
我找到的答案是使用驼峰案例方法名称,然后与一些IIS重写代码冲突,以确保网址小写。
这是通过使用Fiddler发现的,这是我的耻辱,以前从未使用过。我现在已经完全转换了!
答案 3 :(得分:0)
我找到的方法500只是由于正确设置了错误的代码或数据库安全权限。
因此,确保您的数据表正在返回数据(例如,IIS apppool是否具有正确的权限,并确保您的KnownCategoryvalues(例如bPLUID的值)和类别(例如Bintype)正确且在{{1}中正确的方式}和dr["bT"].ToString()
。检查两种网络方法。
您可以通过调用来测试Web方法。浪费不应该需要价值观。 r["bPLUID"].ToString()));
可能已知类别值= bPLUID:[此处输入id值]类别bintype。
恼怒但最终确实有效。
答案 4 :(得分:0)
我有同样的问题。在我安装其他角色服务后,Tt工作然后停止了。然后在我的头部散了几个小时后,我发现在网站的Handler Mappings中,* .asmx的一个脚本方法的版本号错了!查找公共令牌:B03F5F7F11D50A3A,如果看到版本2.0.0.0,则删除它。而已。