2009-07-22 4 views
0

Я хотел бы передать вложенный объект JavaScript в мой ASP.NET MVC Action Method. Вот код (упрощенно):Как передать вложенный объект JavaScript в ASP.NET MVC Action Method?

$.getJSON('some/url', 
       { 

        index: pageIndex, 
        pageSize: pageSize, 
        filter:{one:'one',two:'two',three:'three'} 
       },someCallBack(msg) 
     ); 

Я использую JQuery и реализовать свой плагин, который лениво извлекает данные из разбитых на страницах сервера. Он работает все прелести, но теперь мне нужно передать объект JavaScript «Фильтр» с переменным количеством фильтров свойств. На стороне сервера я получаю массив объектов, где первый элемент представляет собой строку, содержащую литерал '[Object object]'.

Очевидно, что мой вложенный объект (фильтр) не расширяется и не превращается в объект (хеш) на стороне сервера. Это вообще возможно?? Я не хочу жестко закодировать свои фильтры, так как плагин предназначен для применения без ограничений.

спасибо.

ответ

3

Вы можете использовать System.Web.Script.Serialization.JavaScriptSerializer для отправки/получения JSON сериализованную данные:

JavaScriptSerializer js = new JavaScriptSerializer(); 
Filter f = js.Deserialize<Filter>(json_str); 

Более подробную информацию here. Чтобы кодировать данные JSON для отправки на сервер, используйте библиотеку сериализации JSON для JavaScript, например json2.js. Затем отправьте запрос следующим образом:

var filter = {field1: 'value1', field2: 'value2'} 

$.ajax({ 
type: "POST", 
url: '/server/path', 
data: { filter: JSON2.stringify(filter) }, 
dataType: "json", 
success: function(data) { 
    // do something 
} 
}); 
1

JSON будет идеально подходит для этого. В принципе, вы захотите преобразовать свой объект в его JSON-представление, а затем отправить его через провод. Как только он будет доступен на сервере, вы можете обработать его, как вам нравится.

У Crockford есть great article на том, что такое JSON, как понимать нотацию, и он предоставляет инструмент для преобразования ваших объектов в нотацию JSON.

1

Вы можете использовать следующий js lib json2 library, затем вы можете использовать метод stringify, чтобы гарантировать, что ваш json находится в правильном формате для службы.

var data0 = {one:'one',two:'two',three:'three'} 

var json = JSON2.stringify(data0); 

$.ajax({ 
type: "POST", 
url: someServiceUrl, 
data: json, 
contentType: "application/json; charset=utf-8", 
dataType: "json", 
success: function(msg) { 

} 
}); 
Смежные вопросы