Прежде всего для следует использовать атрибут [ScriptMethod (ResponseFormat = ResponseFormat.Json)]
для веб-метода или настроить его в файле web.config, если вы используете .NET 4.0.В обоих случаях вам не нужно создавать какие-либо JSON-сериализации вручную.Вместо этого вы можете просто вернуть сам объект.Другими словами, вы должны следовать совету tvanfosson , но возвращать List<Article>
напрямую:
[System.Web.Script.Services.ScriptService]
public class Header : System.Web.Services.WebService {
[WebMethod, ScriptMethod (ResponseFormat = ResponseFormat.Json)]
public List<Article> GetArchive(int PageID)
{
BusinessRules.News news = new BusinessRules.News();
BusinessObject.NewsItemList newsList = news.GetListbySectionID(PageID));
return newsList.Select (a => new Article
{
ID = a.ID,
Date = a.Date
});
}
public class Article
{
public string ID { get; set; }
public string Date { get; set; }
}
}
Я изменил тип входного параметра PageID
с string
int
, чтобы показать, что входные параметры не должны быть только строкой.Это может быть также экземпляр класса (см. мой старый ).
На стороне клиента внутри $(document).ready(function () {/*the code here you will see below*/});
:
var ParamValue = $.getUrlVar("id");
var pageID = parseInt(ParamValue,10);
$('#LinkBtnAll').click(function () {
$.ajax({
type: "POST",
url: "Services/Header.asmx/GetArchive",
data: {PageID: JSON.stringify(pageID)},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
$('#Content').text(msg.d);
}
})
return false;
});
декодированиерезультаты msg.d
вы должны реализовать другим способом, потому что msg.d
- это массив, но это будет простой код JavaScript.
Я рекомендую вам взглянуть на старый ответ и еще один для получения дополнительной информации.