2010-05-25 6 views
3

백엔드 C# WebForm에 JQuery AJAX POSTing 데이터가 있습니다. 그것은 값을 반환하는 정적 문자열 WebForm 메서드에 POST를 수행하고 JQuery는 해당 값을 사용하여 html의 이미지 URL을 변경합니다. 모두 훌륭하고 멋쟁이입니다.Jquery + AJAX + ASP.Net + WebForms

그러나 나는 할 수없는 C# 백엔드에서 프론트 엔드 ASP 컨트롤을 조작 할 수 있도록 기존 코드의 기능을 확장하고 싶습니다 (전체 코드를 다시 작성하지는 않았지만). 이 정적 문자열 메서드가 내 WebForm으로 작동하기 때문입니다.

누구든지 내 곤경을 도울 수있는 아이디어가 있습니까?

백엔드

[System.Web.Services.WebMethod] 
    public static string ImageLoad(string address) 
    { 
     //if fail 
     return "/Unavailable.bmp"; 

     //if succeed 
     return "myimage.jpg"; 
     //third option 
     else 
     return "myotherimage.jpg"; 
    } 

JQuery와/AJAX

function scriptImageLoad() { 
    var address = $("#txtAddress").val(); 
     $.ajax({ 
      type: "POST", 
      url: "myPage.aspx/ImageLoad", 
      data: "{'address':'" + address.toString() + "'}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "text", 
      success: function (output) { 
       $('#imgImage').attr('src', output); 
      } 
     }); 
    } 
}); 

답변

0

동료의 도움을 받아 다른 해결책을 개발했습니다. 구조체는 원하는 출력 데이터를 보유하고 문자열 배열로 전달 된 다음 정적 문자열 웹 메서드를 통해 반환됩니다. 일단 Jquery에 반환되면 데이터는 배열의 다른 인덱스로 이동해야하는 곳으로 푸시됩니다.

프런트 엔드

function scriptImageLoad() { 
    var address = $("#txtAddress").val(); 
     $.ajax({ 
     type: "POST", 
     url: "MyForm.aspx/MyMethod", 
     data: "{'address':'" + address.toString() + "'}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "JSON", 

     success: function (output) { 
      $.each(output, function (index, value) { 
       place value in form 
       return (index != 0); 
      }) 
      $.each(output, function (index, value) { 
       place value in form 
       return (index != 1); 
      }) 
      $.each(output, function (index, value) { 
       place value in form 
       return (index != 2); 
      }) 
      $.each(output, function (index, value) { 
       $('#imgImage').attr('src', this); 
       return (index != 3); 
      }) 
     } 

맨 끝

public struct TestStruct 
    { 
     public string value1; 
     public string value2; 
     public string value3; 
     public string value4; 

     public TestStruct(string value1, string value2, string value3, string value4) 
     { 
      this.value1 = value1; 
      this.value2 = value2; 
      this.value3 = value3; 
      this.value4 = value4; 
     } 
    } 

    [System.Web.Services.WebMethod] 
    public static string[] MyMethod(string address) 
    { 
     string[] returnarray = new string[4]; 
     TestStruct struct; 
     struct.value1 = ""; 
     struct.value2 = address; 
     struct.value3 = ""; 
     struct.value4 = "/Unavailable.bmp"; 

     //if fail, return default values 
       returnstring.SetValue(struct.value1, 0); 
       returnstring.SetValue(struct.value2, 1); 
       returnstring.SetValue(struct.value3, 2); 
       returnstring.SetValue(struct.value4, 3); 
       return returnstring; 

     //if succeed 
       struct.values = processed values; 
       set the values on returnstring 
       return returnstring; 
     //else 
       struct.values = other processed values; 
       set the values on returnstring 
       return returnstring; 
    } 

지금 내가 가진 유일한 문제는 제대로 클라이언트에 데이터를 표시하기 위해 jQuery를 받고있다.

+0

나는 모든 ".this"태그를 ".value"태그로 대체하여 작업을 수행했습니다. – Kevin

2

어떤 종류의 포스트 백이 서버 컨트롤을 처리하기 위해 필요합니다.

업데이트 패널은이 시나리오에서 asp.net 컨트롤을 사용하는 유일한 선택입니다.

하지만 다른 접근 방법을 찾는 것이 좋습니다. 패널을 업데이트하면 악마가되어 사마귀가 생깁니다. 나쁜 종류.

+0

@joo - 곧 충분하지 않습니다. 하지만 나는 결코 자유롭지 않을 것입니다 - codeplex는 하나의 커다란 업데이트 패널이며 거기에 여러 프로젝트가 있습니다. 무기한 미래에 대한 업데이트 패널의 사용자/희생자가 될 것입니다. ; - \ –

4

WebService을 사용하십시오. 이렇게하면 웹 사이트 어디에서나 jQuery로 서비스를 호출 할 수 있습니다.

function scriptImageLoad() { 
    var address = $("#txtAddress").val(); 
     $.ajax({ 
      type: "POST", 
      url: "MyService.asmx/ImageLoad", 
      data: "{'address':'" + address.toString() + "'}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "text", 
      success: function (output) { 
       $('#imgImage').attr('src', output); 
      } 
     }); 
    } 
}); 

[WebService, ScriptService] 
public class MyService : WebService 
{ 
    [ScriptMethod] 
    public static string ImageLoad(string address) 
    { 
     //if fail 
     return "/Unavailable.bmp"; 

     //if succeed 
     return "myimage.jpg"; 
     //third option 
     else 
     return "myotherimage.jpg"; 
    } 
} 
+0

동료들로부터 WebServices를 피하도록 권고 받았지만, 필자의 필요에 맞지 않습니다. – Kevin

+0

왜 WebServices를 사용하지 말라고 조언 했습니까? – jrummell

+0

내 웹 응용 프로그램의 목표/목표는 웹 서비스의 사용으로 이익을 얻을 수 없습니다. 나는 여전히 내가 현재 가지고있는 것과 같은 이슈들을 보게 될 것이다. 그러나 내 문제에 대한 새로운 해결책을 고안했습니다. 현재 구조를 사용하여 출력을 집어 넣은 다음 해당 출력을 문자열 배열로 반환합니다. – Kevin