KO.Utils.PostJSon возвращает значение Null в контроллере MVC 4

0

Я пытаюсь создать Grid, используя knockout.js, следуя http://blog.stevensanderson.com/2010/07/12/editing-a-variable-length-list-knockout-style/

когда я пытаюсь опубликовать значения из viwe в контроллер, всегда получаю значение count = 0. Но я пытаюсь проверить, имеет ли данные модель представления с использованием alert.it, как ожидается. Там кто-нибудь сталкивался/исправлял это issue.kindly выделите меня, где ошибка.

она моя модель.

public class GiftModel
{
    public string Title { get; set; }
    public string Price { get; set; }
}

Код в COntroller:

         public ActionResult Index()
    {
        var initialState = new[] {
    new GiftModel { Title = "Head First C#", Price = "49.95" },
    new GiftModel { Title = "Head First Js", Price = "78.25" }
        };
        return View(initialState);
    }

    [HttpPost]
    public ActionResult Index(IEnumerable<GiftModel> gifts)
    {
        return View();
    }

Вот что делает ia ma.

var initialData = @Html.Raw (новый System.Web.Script.Serialization.JavaScriptSerializer(). Сериализация (модель));

var viewModel = { 
    gifts : ko.observableArray(initialData), 

    addGift: function () { 
        this.gifts.push({ Title: "", Price: "" }); 
    },

    removeGift: function (gift) { 
        this.gifts.remove(gift); 
    },

    save: function() { 
        var data = ko.toJSON(this.gifts);
        alert(data);
        ko.utils.postJson(location.href, { gifts: data });
    }
}; 

ko.applyBindings(viewModel,document.body);

Я тоже пробовал с обычной Ajax-страницей. Но все равно я получаю то же самое.

Редактировать: вот что я получаю в оповещении

[{"Название": "Голова первая С#", "Цена": "49,95"}, {"Название": "Голова первый Js", "Цена": "78.25"}]

Обновление: если я передаю всплывающее содержимое, контроллер напрямую сможет идентифицировать данные.

        var model = [{"Title":"Head First C#","Price":"49.95"},{"Title":"Head First Js","Price":"78.25"}];"Status": "Reserved" }];
        $.ajax({
            url: '/Grid/Index',
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            data: JSON.stringify(model),
            success: function (result) {

            }
        });
  • 0
    Не нужно вызывать ko.toJSON() . внутренне ko.utils.postJson() сделает это за вас.
  • 0
    да, я начал с того, что не дал мне вывода, затем я перешел на Ajax Calls.Thanks @ haim770
Показать ещё 1 комментарий
Теги:
knockout.js
asp.net-mvc-4
knockout-mvc

3 ответа

2
Лучший ответ

Наконец, я достиг этого.

Нам нужно вызвать ko.toJS(this.gifts) перед отправкой данных в запрос.

Вот рабочий код.

var initialData = @Html.Raw(Json.Encode (модель));

var viewModel = { 
    gifts : ko.observableArray(initialData), 

    addGift: function () { 
        this.gifts.push({ Title: "", Price: "" }); 
    },

    removeGift: function (gift) {
        this.gifts.remove(gift);
    },

    Save : function () {

        var ViewModel = ko.toJS(this.gifts);


        $.ajax({
            type: "POST",
            url: "/Grid/Index",
            data: ko.toJSON(ViewModel),
            contentType: 'application/json',
            async: true,
            complete: function () {
                alert('success');
            },
            error: function (jqXHR, textStatus, errorThrown) {
                alert('Error');
            }
        });
    }
}; 

Спасибо Ivan.Srb, szpic.

0

Я просто хочу спросить: у вас есть модель:

public class GiftModel
{
    public string Title { get; set; }
    public double Price { get; set; }
}

почему вы вдавливаете в ценовые строки, в то время как они удваиваются?

new GiftModel {/**/, Price = "78.25" }

в ссылке, которую вы указали в этой строке, выглядит следующим образом:

new GiftModel { /**/, Price = 78.25 }

Я не говорю, что это поможет решить вашу проблему. Мне просто интересно.

@Обновить

На этой веб-странице: KnockOutJS Homepage Вы можете найти эту строку:

// To actually transmit to server as a regular form post, write this: 
ko.utils.postJson($("form")[0], self.gifts);

Без использования ko.toJSON (данные); Поэтому в вашем случае это будет:

ko.utils.postJson(youradress,this.gifts)

Проверь это :)

  • 0
    Извините, изначально у меня есть эта модель, затем, пройдя все варианты, я не знаю, что делать (: -. собираюсь DUMB), я просто изменяю double на строку. Так что я изменил это. Извините, я не обновил в Вопросе
  • 0
    Проверьте мое обновление
Показать ещё 1 комментарий
0

Попробуйте использовать ko.toJS вместо ko.toJSON.

Обновление:
Попробуйте это (вместо ko.utils.postJson):

$.ajax({
        url: <your_url>,
        type: 'POST',
        contentType: "application/json",
        data: JSON.stringify(data)
    });
  • 0
    Я пытался с этим, но все тот же результат ..
  • 0
    Посмотрите обновление ответа
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню