[英]Ajax call to asp.net c# method returning custom object list
我正在嘗試調用此WebMethod:
[System.Web.Services.WebMethod]
public static List<CustomObject> Carica(int ID)
{
List<CustomObject> elenco = new List<CustomObject>();
try
{
elenco = GetElencoByID(ID);
}
catch (Exception ex)
{
throw ex;
}
return elenco;
}
使用Ajax:
function caricaElenco(ID) {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "nomePagina.aspx/Carica",
data: '{ID:' + ID + '}',
dataType: "json",
success: function (response) {
for (var i = 0; i < response.d.length; i++) {
alert(response.d[i].nomeCampo);
}
},
error: function (result) {
alert("Errore! " + result.status + " - " + result.statusText);
}
});
}
但是,即使調試服務器代碼,我總是遇到錯誤500,他在做他的工作並返回列表。.如果我只是為了測試而修改返回單個對象的函數,請執行以下操作:
public static CustomObject Carica(int ID)
{
(...)
return elenco[0];
}
我能夠做到:
success: function (response) {
alert(response.d.nomeCampo);
}
},
它正在工作! 我也嘗試將方法簽名更改為:
public static IENumerable<CustomObject> Carica(int ID)
但還是沒有運氣。.關於ajax和自定義對象列表的問題(對象是[可序列化]?
更新:
現在我已經:
[System.Web.Services.WebMethod]
public static void Carica(int ID)
{
List<CustomObject> elenco = new List<CustomObject>();
try
{
elenco = GetElencoByID(ID);
}
catch (Exception ex)
{
throw ex;
}
System.Web.Script.Serialization.JavaScriptSerializer jSearializer =
new System.Web.Script.Serialization.JavaScriptSerializer();
string result = jSearializer.Serialize(flussi);
System.Web.HttpContext.Current.Response.ContentType = "application/json";
System.Web.HttpContext.Current.Response.Write(result);
System.Web.HttpContext.Current.Response.End();
}
但是仍然出現“ Errore!500-Internal Server Error”,但是調試服務器代碼時沒有錯誤,我可以在結果值中看到[{“ ID”:1,“ campo1”:null,“ campoData”:“ / Date(1410166675790) /","campoInt":3858.62},{"ID":2,"campo1":null,"campoData":"/Date(1410166675790)/","campoInt":3858.62}(...)]。
如果我評論Response.End()(只是嘗試),我會收到“ Errore!200-OK”
更新2:
好的,我已經安裝了Fiddler,錯誤500實際上是指Response.End()附帶的ThreadAbortException。 使用返回List的方法返回原始代碼,這是一個真正的問題...異常消息:使用JSON JavaScriptSerializer進行序列化或反序列化時出錯。 字符串的長度超過了在maxJsonLength屬性上設置的值。
更新3:
好的,我已經看到了: Ajax請求返回200好的,但是會引發錯誤事件而不是成功,並且這是: jQuery AJAX狀態為“ 200好的”,但是沒有數據響應說明為什么我得到了確定,但未成功注釋Response.End()..我不知道是否可以將整個列表放在JSON中,同時還將maxJsonLength設置為Int32.MaxValue,因為實際上是2437個元素的列表,其中包含很多字段。
使用WebMethod時,我發現有時必須強制其返回JSON。 您將失去內容協商(除非您手動實施協商)。 我仍然建議盡可能切換到Web API 。 但這應該可以解決問題。
[System.Web.Services.WebMethod]
public static void Carica(int ID)
{
List<CustomObject> elenco = new List<CustomObject>();
try
{
elenco = GetElencoByID(ID);
}
catch (Exception ex)
{
throw ex;
}
Response.ContentType = "application/json";
Response.Write(JsonConvert.SerializeObject(elenco)); //using JSON.NET, but any serializer should do
Response.End();
}
因此,對於返回類型,將其切換為void。 然后,將響應的內容類型設置為JSON。 然后,將“返回對象”手動轉換為JSON並將其寫入響應,然后結束響應。
在Web.Config中進行設置:
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="2147483647"/>
</webServices>
</scripting>
</system.web.extensions>
基於此:
我可以在web.config中為maxJsonLength設置無限長度嗎?
現在,它可以與原始的WebMethod一起使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.