실제로 서버에서만 서버 컨트롤을 만들 수 있습니다. 따라서 질문은 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));
}
}
}
}
}
json에 대해 이야기하기 전에 서버 코드에 대해 이야기 해 봅시다. LinkButton이 Ajax 호출의 응답 인 것은 의미가 없습니다. 클라이언트 쪽에서는 아무 것도 할 수 없습니다. –