отправить объект JavaScript с неизвестными свойствами в контроллер asp.net MVC - PullRequest
2 голосов
/ 19 августа 2011

Я прочитал довольно много блогов и ответов от stackoverflow о том, как отправить объект JavaScript на контроллер asp.net MVC. Но все примеры, которые я видел до сих пор, требуют, чтобы вы знали, какие свойства будет иметь объект JavaScript (поскольку все они преобразуют объект JavaScript в объект C #).

Когда я использовал PageMethods в веб-формах asp.net, я мог отправить любой сложный объект JavaScript или массив (даже иерархические данные), и он был бы преобразован в словарь, который я мог бы перебрать. Есть ли шанс, что я могу сделать что-то подобное в asp.net MVC?

Ответы [ 4 ]

1 голос
/ 20 августа 2011

Теперь я нашел способ, который работает для меня.

  1. Я преобразовываю свои данные в json и получаю их в виде строки в моем контроллере ASP.net MVC.
  2. Затем я использую библиотеку json.net для чтения данных, поскольку эта библиотека позволяет мне читать данные без преобразования их в объект C # (или VB).

Код JavaScript:

//first include the json2 library for older browsers and jQuery
$.post(url, {json: JSON.stringify(mydata)});

Код на стороне сервера:

public void xyz(string json)
{
    JObject j = JObject.Parse(json);
    string name = (string)j.SelectToken("Products[0].Name");
    //...
}

Хорошая вещь: это "обычный" json, что означает, что это не какой-то необычный формат или интерфейс-type.

РЕДАКТИРОВАТЬ: Я обнаружил, что мне даже не нужна json-библиотека C #, если я использую .net 4 - поскольку я могу преобразовать любую строку json в словарьс помощью JavaScriptSerializer:

JavaScriptSerializer jss = new JavaScriptSerializer();
Dictionary<string, object> data = (Dictionary<string, object>) jss.Deserialize<dynamic>(json_string);
0 голосов
/ 19 августа 2011

Что вы можете сделать, это использовать плагин jQuery toDictionary, этот плагин преобразует ваш объект в словарь, который может понять механизм связывания моделей MVC по умолчанию asp.net

, например

 $.ajax({
    url: "/SomeURL",
    type: "POST",
    data: $.toDictionary(dataToSend)
   });

Помните, dataToSend - ваш объект

0 голосов
/ 19 августа 2011

Вы пробовали использовать словарь Request.Forms?

public ActionResult MyAction(FormCollection formValues)
{
}

Итерация по formValues

0 голосов
/ 19 августа 2011

Это будет преобразовано в словарь:

[{"key":0, "value":"something"},{"key":2, "value":"something else"},]

Очевидно, вы могли бы делать string, string или int, bool или т.д ...

Например, у меня есть такой метод:

public int CollabSortFolder(int FolderId, Dictionary<int, int> Items)

Я бы назвал, используя GET:

/CollabSortFolder?FolderId=111111&Items=[{"Key":3685,"Value":0},{"Key":3670,"Value":1},{"Key":3687,"Value":2}]

Теперь, как GET, это не очень элегантно, но пост будет работать так же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...