0

我有 ac# 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,并且运行良好 - 非常令人沮丧。

我确实看过这个 Stackoverflow 问题,但老实说,我并没有完全明白解决方案是什么——尽管我似乎在 bin 文件夹中没有任何重复的 dll。我真的认为问题出在某个地方。

我仔细检查了 SQL 查询,它们都返回数据。

有什么建议么?我已经用完了它们!

编辑:

我已经设置了失败的请求跟踪并得到了这个非常有用的结果:

MODULE_SET_RESPONSE_ERROR_STATUS 警告 ModuleName="ManagedPipelineHandler", Notification="MAP_REQUEST_HANDLER", HttpStatus="500", HttpReason="Internal Server Error", HttpSubStatus="0", ErrorCode="操作成功完成。(0x0)", ConfigExceptionInfo=" “警告

/wastedropdown.asmx/getwaste 和 wastedropdown.asmx/getbintype 产生了同样的错误

希望这对某人意味着什么!

编辑2:

该代码在同一服务器上的不同网站上肯定可以正常工作。我让 Fiddler 出现以下错误:

{"Message":"尝试使用 GET 请求调用方法 \u0027GetWaste\u0027,这是不允许的。","StackTrace":" 在 System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData , HttpContext context)\r\n 在 System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"}

帮助!

4

5 回答 5

1

我认为这是因为您获得的数据太大。您必须将以下代码添加到您的 web.config 中:

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

问候


于 2015-03-18T00:19:51.497 回答
0

我发现的方法 500 只是由于正确设置了错误的代码或数据库安全权限。

因此,请确保您的数据表正在返回数据(例如,IIS 应用程序池是否具有正确的权限,并确保您的 KnownCategory 值(例如bPLUID的值)和类别(例如 Bintype)是正确的 dr["bT"].ToString(),并且在 和r["bPLUID"].ToString()));.

您可以通过调用来测试 Web 方法。获得浪费不应该需要价值观。getBinWaste大概会 Known category value =bPLUID: [enter a id value here] category bintype。

令人恼火,但最终确实有效。

于 2014-01-24T16:00:17.463 回答
0

我有同样的问题。在我安装其他角色服务后,Tt 工作然后停止。然后我摸索了几个小时,发现在站点的 Handler Mappings 中,*.asmx 的一个脚本方法的版本号错误!查找公共令牌:B03F5F7F11D50A3A,如果您看到版本 2.0.0.0,则将其删除。而已。

于 2014-02-28T15:15:27.480 回答
0

结帐链接: 方法错误 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

于 2013-05-08T11:26:52.420 回答
0

我发现答案归结为使用驼峰式方法名称,然后与一些 IIS 重写代码冲突,以确保 url 是小写的。

这是通过使用 Fiddler 发现的,令我感到羞耻的是,它以前从未使用过。我现在是一个彻底的皈依者!

于 2013-05-13T09:38:42.463 回答