Это вызов Ajax:

        var selectedProductOptions = new Array();

    $(".optionSelectionBox").each(function () {
        selectedProductOptions.push($(this).val());
    });

$.ajax({
        url: "/Cart/AddItem",
        type: 'post',

        data: JSON.stringify({ 
            productId : @Html.ValueFor(m => m.Product.Id),
            selectedOptions : selectedProductOptions,
        }),
        success: function (data) {
            if (data.IsSuccess) {
                alert("test Hello Success");
            }

            alert("test HELLO Fail");
        },
        error: function (jqXHR, textStatus, errorThrown) {
            alert(errorThrown + "- Error");
        }
    });

И это контроллер, который принимает вызов.

    [HttpPost]
    public JsonResult AddItem(string productId, List<string> selectedOptions)
    {
     //Code here        
    }

Когда я устанавливаю точку останова для действия, оно попадает, что я и хочу, но ..... productId и selectedOptions имеют значение NULL.

Что я делаю не так?

0
Ayo Adesina 13 Мар 2014 в 13:46
Какие данные хранятся в selectedProductOptions? Можете ли вы привести пример?
 – 
Vivek Parekh
13 Мар 2014 в 14:01
SelectedProductOptions: Array[4] 0: "4" 1: "1" 2: "7" 3: "10" << Это объект из инструментов разработчика Chrome
 – 
Ayo Adesina
13 Мар 2014 в 14:06

3 ответа

Лучший ответ

ОК, теперь работает .... :-)

И это мое решение, надеюсь, оно поможет другим.

Это действие контроллера:

    [HttpPost]
    public JsonResult AddItem(string formData)
    {

    var js = new JavaScriptSerializer();
    AddItemModel addItemModel  = js.Deserialize<AddItemModel>(formData);


   //Other Code here

        return new JsonResult();
    }

    public class AddItemModel
    {
        public List<string> selectedOptions { get; set; }
        public string productId { get; set; }
    }

И это вызов Ajax:

$.ajax({
        url: "/Cart/AddItem",
        type: 'post',

        data: "formData=" + JSON.stringify(cartItem),
        success: function (data) {
            if (data.IsSuccess) {
                alert("test Hello Success");
            }

            alert("test HELLO Fail");
        },
        error: function (jqXHR, textStatus, errorThrown) {
            alert(errorThrown + "- Error");
        }
    });

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

Спасибо, ребята ... переходим к следующему.

0
Ayo Adesina 13 Мар 2014 в 15:06

Вы также можете сделать что-то вроде этого:

Создать новый класс:

public class AddItemModel
    {
        public List<string> selectedOptions { get; set; }
        public string productId { get; set; }
    }

И измените свой код:

public JsonResult AddItem(AddItemModel aim)

И вызов ajax:

data: JSON.stringify({
                    aim: {
                        productId : @Html.ValueFor(m => m.Product.Id),
                        selectedOptions : selectedProductOptions                           
                    }

Это тоже должно работать

1
szpic 13 Мар 2014 в 13:55
Пробовал и это.. достигает точки останова, но цель объекта установлена, но selectedProductOptions и productId по-прежнему равны нулю... вздох Я думаю, что здесь нужен сериализатор JS....
 – 
Ayo Adesina
13 Мар 2014 в 14:40

Удалить , в selectedOptions : selectedProductOptions,

data: JSON.stringify({ 
        productId : @Html.ValueFor(m => m.Product.Id),
        selectedOptions : selectedProductOptions
    }),

Изменить

Попробуйте и это тоже

 data: {
 productId: @Html.ValueFor(m = > m.Product.Id),
 selectedOptions: JSON.stringify(selectedProductOptions)
 },
1
Anoop Joshi P 13 Мар 2014 в 14:01
Только что попробовал... Все еще нет радости... как productId, так и selectedOptions по-прежнему равны нулю
 – 
Ayo Adesina
13 Мар 2014 в 13:58
Я также попытался изменить selectedOptions на List, чтобы посмотреть, поможет ли это. No Joy
 – 
Ayo Adesina
13 Мар 2014 в 14:03