Какой параметр нужен моему контроллеру .NET MVC 2 для публикации в формате JSON - PullRequest
2 голосов
/ 04 августа 2011

Я не могу понять, какие параметры или тип использовать в моем контроллере при принятии POST от вызова jaery .ajax, использующего Json.

JSON выглядит примерно так (я только что написал этотак что это может быть неверно, это не проблема)

[{"paths":[[{"a":294,"b":174,"c":1297178158028}]]

Мой контроллер:

[HttpPost]
public void SaveDrawData() {
}

$.ajax('../Home/SaveDrawData', { type: 'POST', contentType: 'application/json', dataType: 'json', processData: false, cache: false, data: serial, success: function() { var saved = $('<div id="saved">Saved!</div>')
                    .appendTo('body')
        }

Я точно знаю, что SaveDrawData поражается установкой точки останова.

Я проверил firebug, а в сообщении JSON перечислены "пути".

Как мой контроллер получает доступ к этим данным?Какой тип и / или имя переменной мне нужно поместить туда?

Большое спасибо!

Ответы [ 4 ]

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

Вы пробовали:

public ActionResult SaveDrawData(string paths)
{
    //do stuff here
}

Также попробуйте получить доступ к ViewData["paths"] в действии вашего контроллера. Если вы добавите прикрепленный отладчик и Add Watch для ViewData, вы сможете увидеть, что представление отправляет обратно и как оно его вызывает.

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

Поскольку вы используете MVC 2, вам нужно сослаться на ASP.NET MVC Futures для получения значений JSON.Сначала убедитесь, что ваш контроллер имеет ASP.NET MVC Futures, а затем попробуйте JSON-постить простые (например, целочисленные) типы в метод контроллера как POC, чтобы ваш контроллер уже мог получать данные JSON;если вы убедились, что ваш контроллер уже может получать данные JSON, попробуйте следующую структуру:

public class Mate
{
   public int a { get; set; }
   public int b { get; set; }
   public int c { get; set; }
};


public void SaveDrawData(Mate[] paths) {
}

JSON-библиотека для ASP.NET MVC 2: ASP.NET MVC Futures: http://haacked.com/archive/2010/04/15/sending-json-to-an-asp-net-mvc-action-method-argument.aspx

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

Вы можете передать массив в качестве параметра POST, и MVC обнаружит его как список строк.

[HttpPost]
public ActionResult SaveDrawData(List<string> paths)
{
    var someObject = CreateObjectFromPaths(paths);
    return Json(someObject);
}

Также при вызове $ .ajax jQuery попробуйте установить traditional: true

UPDATE

Я присмотрелся к тому, что вы передаете в вызов .ajax. Похоже, ваш параметр на самом деле будет List<int>:)

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

Как насчет этого решения

HTML-код:

<% с использованием (Ajax.BeginForm (new AjaxOptions () {UpdateTargetId = "location", HttpMethod = "POST"})) {// делайте ваши вещи здесь}%>

Контроллер

[AcceptVerbs(HttpVerbs.Post)]
        public JsonResult YourAction()
        {
            IList<KeyValuePair<string, object>> results = new

Список> ();

        KeyValuePair<string, object> pair1 = new
> KeyValuePair<string, object>("key one",
>                                                                       
> new {testing = "object one testing "});
>                 results.Add(pair1);
>                 //return Json(results, JsonRequestBehavior.AllowGet); 
> //if you want allow get
>                 return Json(results);
>             }

где, когда происходит отправка: будет запрос, как при отправке HTML-формы, и вы получите результаты, доступные как Запрос ["имя_параметра"]

или привязать его к модели, в которой вы будете приводить модель в действие контроллера:

EG:

public ActionResult YourAction (модель FooModel) { //делай свое дело }

Чтобы прочитать об этом, посетите этот учебник. http://lozanotek.com/blog/archive/2010/04/16/posting_json_data_to_mvc_controllers.aspx

Надеюсь, это поможет.

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