표준 웹 양식 .Net에서 JSON 개체를 반환하는 방법
목표는 메소드를 호출하여 JSON 객체를 반환하는 것입니다.
JSON은 처음입니다.
나는 default.aspx와 그 안에 다음과 같은 코드가 있습니다.이제 저는 Default.aspx.cs 의 일반적인 방법이 여기 클릭 이벤트에서 실행되기를 원합니다.
$(".day").click(function (event) {
var day = $(event.currentTarget).attr('id');
if (day != "") {
$.ajax(
{
type: "POST",
async: true,
url: 'Default.aspx?day=' + day,
data: day,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
console.log("SUCCESS:" + msg);
// $(".stripp img").attr('src', "data:image/jpg;" + msg);
// $(".stripp").show();
},
error: function (msg) {
console.log("error:" + msg);
}
});
}
});
Default.aspx.cs 은 다음과 유사합니다.
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["day"] != null)
GetFile(Request.QueryString["day"]);
}
public string GetFile(string day)
{
string json = "";
byte[] bytes = getByteArray();
json = JsonConvert.SerializeObject(bytes);
return json;
}
제가 어디서 잘못되고 있나요?어떤 식으로 사용해야 합니까? 아니면 웹 서비스에서만 사용할 수 있습니까?
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
제가 제안하고 싶은 것은HttpHandler
페이지 수명 주기가 없고(따라서 속도가 빠름) 코드 분리가 훨씬 깔끔할 뿐만 아니라 재사용 가능성도 뛰어납니다.
프로젝트의 "일반 처리기" 유형에 새 항목을 추가합니다.새 .ashx 파일이 생성됩니다.구현하는 모든 클래스의 주요 방법IHttpHandler
이라ProcessRequest
원래 질문의 코드를 사용하려면 다음과 같이 하십시오.
public void ProcessRequest (HttpContext context) {
if(String.IsNullOrEmpty(context.Request["day"]))
{
context.Response.End();
}
string json = "";
byte[] bytes = getByteArray();
json = JsonConvert.SerializeObject(bytes);
context.Response.ContentType = "text/json";
context.Response.Write(json);
}
AJAX 호출의 URL을 변경하면 됩니다.JavaScript는 다음과 같습니다. 여기서 GetFileHandler.ashx는 방금 만든 IHTtpHandler의 이름입니다.
$.ajax(
{
type: "POST",
async: true,
url: 'Handlers/GetFileHandler.ashx',
data: "Day=" + $.toJSON(day),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
console.log("SUCCESS:" + msg);
},
error: function (msg) {
console.log("error:" + msg);
}
});
고려해야 할 또 다른 작은 점은 처리기 코드 자체 내에서 세션 개체에 대한 액세스가 필요한 경우 다음에서 상속해야 합니다.IRequiresSessionState
인터페이스:
public class GetFileHandler : IHttpHandler, IRequiresSessionState
예, 메서드는 WebMethod 특성과 함께 정적이어야 합니다.
기본 예:
CS
using System;
using System.Web.Services;
public partial class _Default : System.Web.UI.Page
{
[WebMethod(EnableSession=false)]
public static string HelloWorld()
{
return "Hello World";
}
}
자바스크립트
<script>
$.ajax({
type: "POST",
url: "Default.aspx/HelloWorld",
data: "{}",
contentType: "application/json",
dataType: "json",
success: function(msg) {
console.log(msg.d);
}
});
</script>
웹 양식으로 작업한 지 오래되었지만, 정확히 기억한다면 웹 메서드 속성을 GetFile 메서드 위에 놓고 해당 메서드를 정적으로 만들면 작동할 것입니다.
[WebMethod]
public static string GetFile(string day)
게다가, 아약스 방식으로 데이터를 게시하는 방법은 약간 다릅니다.URL에서 쿼리 문자열 day를 제거하고 데이터는 json 형식({"day":day})이어야 합니다.
언급URL : https://stackoverflow.com/questions/8072745/how-to-return-a-json-object-in-standard-web-forms-net
'programing' 카테고리의 다른 글
jQuery를 사용하여 div의 높이가 변경되는 경우 감지 (0) | 2023.08.19 |
---|---|
Junit Spring을 실행하는 방법매개 변수화된 JUNit4ClassRunner? (0) | 2023.08.19 |
각도 물질의 대화 상자에 데이터를 전달하는 방법 2 (0) | 2023.08.19 |
Python에서 사용 가능한 포트 나열 (0) | 2023.08.19 |
jQuery 함수로 직접 자식 요소만 가져오는 방법 (0) | 2023.08.19 |