500 asp.net 内部服务器错误

500 Internal Server Error in asp.net

本文关键字:服务器 错误 内部 net asp      更新时间:2023-09-26

问题概述:我正在创建一个应用程序,其中我有一个html选择列表,从中我选择一个类别,并从该类别中获取项目,并使用ajax webmethod获得图像。

问题概述:我在ajax linq to sql中遇到了许多500错误并修复了它。但是现在我正在研究 ado.net 应用程序,我面临的问题是当我从选择列表(catlist)中选择一个类别时,它从这里向我显示错误error: function (xhr) { alert(xhr.status);}

 [参数异常]:未知的 Web 方法列表。 参数名称:方法名称 at System.Web.Script.Services.WebServiceData.GetMethodData(String methodName) at System.Web.Handlers.ScriptModule.OnPostAcquireRequestState(Object sender, EventArgs eventArgs) at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completeSyncally).

如何修复此错误。我想我简要地描述了我的问题。

默认.Aspx 代码概述:

下面是我的网页

<table>
    <tr>
        <td>
            <select id="catlist" runat="server" onchange="getImageUrl()"></select>
        </td>
        <td></td>
    </tr>
    <tr>
        <td>
            <img id="imgload" width="180" height="100" src="" alt="No Image Found" />
        </td>
        <td>
            <ul>
                <li>Description</li>
                <li>Loreum IspumLoreum IspumLoreum IspumLoreum IspumLoreum IspumLoreum IspumLoreum Ispum</li>
            </ul>
        </td>
    </tr>
</table>

下面是我的Javascript函数

function getImageUrl() {
        var catid = $("#catlist")[0].value;
        $.ajax({
            url: "Default.aspx/elist",
            data: { catId: catid },
            contentType: "Application/json; charset=utf-8",
            responseType: "json",
            method: "POST",
            success: function (response) {
                alert(response.d);
            },
            error: function (xhr) {
                alert(xhr.status);
            },
            Failure: function (response) {
                alert(response);
            }
        });
    }

Default.Aspx.cs 代码概述:

以下是我的自定义课程

public class events
{
    public string EVE_NAME { get; set; }
    public string EVE_IMG_URL { get; set; }
    public string EVE_DESCRIPTION_SHORT { get; set; }
}

下面是数据表方法

private static DataTable dt2(int catId)
{
    DataTable dataTable = new DataTable();
    SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=EVENT;Persist Security Info=True;User ID=sa;Password = 123");
        string query = "sp_view";
    SqlCommand cmd = new SqlCommand(query, conn);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("@catID", SqlDbType.Int).Value = catId;
    conn.Open();
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    da.Fill(dataTable);
    return dataTable;
 }

下面是网络方法

[WebMethod]
private static List<events> elist(int catId)
{
     List<events> eve = new List<events>();
     eve = (from DataRow row in dt2(catId).Rows
           select new events
           {
                   EVE_NAME = row["EVE_NAME"].ToString(),
                   EVE_IMG_URL = row["EVE_IMG_URL"].ToString(),
                   EVE_DESCRIPTION_SHORT = row["EVE_DESCRIPTION_SHORT"].ToString(),
           }).ToList();
     return eve;
 }

注意:数据库列名和事件类属性名相同。

根据属性 WebMethod 的文档:

https://msdn.microsoft.com/en-us/library/byxd99hx(v=vs.90).aspx

WebMethod 属性附加到公共方法表示您希望该方法作为 XML Web 服务的一部分公开。还可以使用此属性的属性进一步配置 XML Web 服务方法的行为。有关更多信息,请参见托管代码中 XML Web 服务的代码模型。

我想,Jon Skeet是对的。 :)

WebMethod 必须是公共的,否则将无法从外部访问。

我只是在我的 web 方法属性后面放了[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]行,并将我与 web 方法关联的所有方法都公开。现在我的明文代码是:

    [WebMethod]
    [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
    public static List<events> elist(int catId)
    {
        List<events> eve = new List<events>();
        eve = (from DataRow row in dt2(catId).Rows
               select new events
               {
                   EVE_NAME = row["EVE_NAME"].ToString(),
                   EVE_IMG_URL = row["EVE_IMG_URL"].ToString(),
                   EVE_DESCRIPTION_SHORT = row["EVE_DESCRIPTION_SHORT"].ToString(),
               }).ToList();
        return eve;
    }
    public static DataTable dt2(int catId)
    {
        DataTable dataTable = new DataTable();
        SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=EVENT;Persist Security Info=True;User ID=sa;Password = 123");
        string query = "sp_view";
        SqlCommand cmd = new SqlCommand(query, conn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("@catID", SqlDbType.Int).Value = catId;
        conn.Open();
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(dataTable);
        conn.Close();
        da.Dispose();
        return dataTable;
    }