2012-04-08 4 views
0

먼저 내 영어를 사과하십시오. 저는 json 지역의 newby입니다. 내 문제는 내가 asp로 json 응답에 recived 데이터를 구문 분석 할 수 없다 : LinkButton 또는 뭐든간에 ASP : 요소, 내가 올바른 sintax 만들 수 없습니다. Especifically, 내가 할 노력하고있어, 이것이다 :asp : LinkButton을 Json 데이터 응답에서 채우는 방법

<script type="text/javascript"> 
    $.getJSON("http://www.carqueryapi.com/api/0.3/?callback=?", { cmd: "getMakes", min_year:"1941", max_year:"2012"}, function (data) { 


      var makes = data.Makes; 
      for (var i = 0; i < makes.length; i++) { 

       ($("<asp:LinkButton ID=\"lb" + i +"\" runat=\"server\" />").text(makes[i].make_display)).appendTo("#lbProva"); 
      } 
     }); 
<script> 

<ul id="lbProva" class="lb_prova" > 

    </ul> 

나는 내가 많은 가능성을 tryed했지만 아무도 올바른 없었다 사촌 누군가가 나를 도울 수 있기를 바랍니다. 미리 감사드립니다.

+0

json에 대해 이야기하기 전에 서버 코드에 대해 이야기 해 봅시다. LinkButton이 Ajax 호출의 응답 인 것은 의미가 없습니다. 클라이언트 쪽에서는 아무 것도 할 수 없습니다. –

답변

1

클라이언트 측 JavaScript에서 asp.net 서버 컨트롤을 만들 수 없습니다. 클라이언트 측에서 json 데이터를 사용하려면 이미 생성 된 html 컨트롤에 json 데이터를 적용해야합니다.

1

실제로 서버에서만 서버 컨트롤을 만들 수 있습니다. 따라서 질문은 AJAX 호출 응답을 서버에 전달하고 페이지에서 원하는 영역을 새로 고치는 방법입니다.

첫 번째 변종

<script type="text/javascript"> 
    $(function() { 
     $.getJSON("http://www.carqueryapi.com/api/0.3/?callback=?", { cmd: "getMakes", year: "2009" }, 
     function (data) { 
      //The 'data' variable contains all response data. 
      var makes = $.map(data.Makes, function (make) { return make.make_display; }).join(";"); 
      document.getElementById("<%= CarMakersHiddenField.ClientID %>").value = makes; 
      __doPostBack("<%= CarMakersUpdatePanel.ClientID %>", ""); 
     }); 
    }); 
</script> 

<asp:UpdatePanel runat="server" ID="CarMakersUpdatePanel" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <asp:HiddenField runat="server" ID="CarMakersHiddenField" /> 
     <asp:BulletedList runat="server" ID="MakersList" DisplayMode="LinkButton"> 
     </asp:BulletedList> 
    </ContentTemplate> 
</asp:UpdatePanel> 

서버 코드 : 당신이 업체 객체의 배열 같은 서버에 일부 복잡한 개체를 전달해야하는 경우

protected void Page_Load(object sender, EventArgs e) 
{ 
    MakersList.Items.Clear(); 
    foreach (var maker in CarMakersHiddenField.Value.Split(';')) 
    { 
     MakersList.Items.Add(maker); 
    } 
} 

두 번째 접근 방식은 더를 적당한이다. 이 경우이 객체를 클라이언트의 JSON 문자열로 serialize하고 서버에서 역 직렬화 할 수 있습니다. 조금 변경된 이전 버전처럼 보입니다.

<script type="text/javascript"> 
    $(function() { 
     $.getJSON("http://www.carqueryapi.com/api/0.3/?callback=?", { cmd: "getMakes", year: "2009" }, 
     function (data) { 
      //The 'data' variable contains all response data. 
      var serializedString = Sys.Serialization.JavaScriptSerializer.serialize(data.Makes); 
      document.getElementById("<%= CarMakersHiddenField.ClientID %>").value = serializedString; 
      __doPostBack("<%= CarMakersUpdatePanel.ClientID %>", ""); 
     }); 
    }); 
</script> 

마크 업은 첫 번째 버전과 동일하게 남았습니다. 서버 코드 :

[Serializable] 
public class Make 
{ 
    public string make_id; 
    public string make_display; 
    public bool make_is_common; 
    public string make_country; 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    MakersList.Items.Clear(); 
    if (!String.IsNullOrEmpty(CarMakersHiddenField.Value)) 
    { 
     var serializer = new DataContractJsonSerializer(typeof(Make[])); 
     using (var stream = new MemoryStream(Encoding.Unicode.GetBytes(CarMakersHiddenField.Value))) 
     { 
      var makes = serializer.ReadObject(stream) as Make[]; 
      if (makes != null) 
      { 
       foreach (var maker in makes) 
       { 
        MakersList.Items.Add(new ListItem(maker.make_display, maker.make_id)); 
       } 
      } 
     } 
    } 
} 
+0

정말 감사합니다. 이것은 내가 찾고 있었던 정확하게 것이다! 당신들의 설명에 대해 감사드립니다! – Lorenzo

관련 문제