JSON AJAX комплексного типа перейти к действию MVC2 - PullRequest
1 голос
/ 07 февраля 2012

Я знаю, что раньше об этом спрашивали в аналогичной форме, но я столкнулся с небольшой проблемой ... У меня есть классическая проблема, связанная с попыткой передать сложный тип json в MVC2. Проблема (см. Код ниже): я могу передать значение «subincidentID» контроллеру, но значения «CodeType», «MOCode» и «SubCode» имеют значение NULL. Я установил будущее MVC2 и зарегистрировал «Microsoft.Web.MVC» в global.asax.cs и объявил JsonValueProviderFactory.

Бит JQuery:

$('#btnDone').click(function() {
        var entity = {};
        var dbCode = new Array();
        dbCode[0] = { CodeType: "1", MoCode: "13", SubCode: "12" };
        entity = { subincidentID: "1", codeData: dbCode };      
            $.ajax({
                type: 'POST',
                data: entity,
                dataType: 'json',
                async: false,
                url: "/controller/SaveMOData",
                success: function(result) {
                    alert('success!');
                }
            }); //end of post
        });   //end of btnDone click function

Контроллер в MVC:

[HttpPost]
        public JsonResult SaveMOData(MOSubMitModel mo)
        {
            if (ModelState.IsValid)
            {

            }
            return Json(new { success = "true" });
        }

Класс модели в MVC (2):

public class MOSubMitModel
    {
        public int subIncidentID { get; set; }
        public List<dbCode> codeData { get; set; }
    }

    public class dbCode
    {
        public string CodeType { get; set; }
        public string subCode { get; set; }
        public string MoCode { get; set; }
    }

Я что-то здесь упустил? Должен ли я объявить какое-либо пространство имен на странице контроллера? Я уверен, что это небольшая проблема, но я целый день ломал голову об этом ....: - (..

Спасибо заранее. У. Лам

Ответы [ 2 ]

0 голосов
/ 08 февраля 2012

После еще нескольких проб и ошибок и прочтений я наконец-то понял это сам (подробности других компонентов см. В предыдущем посте):

$('#btnDone').click(function() {
        :
        :
        $.ajax({
            type: 'POST',
            data: JSON.stringify(entity),
            contentType: 'application/json',
            async: false,
            url: "/controller/SaveMOData",
            success: function(result) {
                alert('success!');
            }
        }); //end of post
    });   //end of btnDone click function

Проблема заключалась в том, что я НЕ включал «contentType» (я пытался включить json stringify прежде, но он ВСЕ возвращает NULL, если я не включаю contentType) ... так что ... чтобы подвести итог требованиям по MVC2:

Загрузка MVC Future ..... Разархивируйте будущий zip-файл MVC и скопируйте файл Microsoft.web.mvc в свой проект и сослаться на него. В файле global.asax.cs вашего проекта добавьте " Microsoft.web.mvc », затем добавьте следующую строку в конец функции« Application_start »

ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());

Внесите необходимые изменения в ваш jQuery, как указано выше. Это должно работать (хорошо, это работает для меня !!) .. Надеюсь, что это помогает любому с той же проблемой.

0 голосов
/ 07 февраля 2012

Я слышал о проблемах, использующих следующий синтаксис

$.ajax({
    type: "POST",
    data: {prop:"Value"},
    ....
}

Вместо этого вам нужно преобразовать объект в строку

$.ajax({
    type: "POST",
    data: JSON.stringify({prop:"Value"}),
    ....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...