【发布时间】:2016-06-05 21:19:36
【问题描述】:
问题概述:我正在创建一个应用程序,其中有一个 html 选择列表,我从中选择一个类别,并从该类别中使用 ajax webmethod 获取项目和图像。
问题概述: 我在 ajax linq to sql 中遇到了许多 500 错误并修复它。但是现在我正在处理 ado.net 应用程序,我面临的问题是当我从选择列表(catlist)中选择一个类别时,它会从这里 error: function (xhr) { alert(xhr.status);} 显示错误。
如何解决此错误。我想我简要描述一下我的问题。
Default.Aspx 代码概览:
下面是我的 HTML
<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; }
}
下面是Datatable方法
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
[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;
}
注意: 数据库列名和事件类属性名相同。
【问题讨论】:
-
我注意到您的
elist方法是私有的。我不能说我自己做了很多,但也许这就是问题所在?如果公开会怎样? -
你可能会对这个线程感兴趣:stackoverflow.com/questions/18244696/… 因为 WebMethod 的本机行为返回 XML,而你似乎想要一些 Json。
-
@JonSkeet 是的,我的第一个错误是没有公开我的方法。
-
@DidierAupest 感谢上述线程。我只是缺少的是
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)],位于我在上面的线程中看到的[WebMethod]属性下方。现在我终于得到了 json 格式的响应。再次感谢您的宝贵时间。 -
第三,我发布了我的清晰代码,所以如果其他开发人员卡住了,他们很容易得到答案。
标签: javascript c# jquery asp.net ajax