Отправка данных модели из Knockout обратно в MVC 3 - PullRequest
6 голосов
/ 09 января 2012

Я новичок в нокауте и с трудом пытаюсь вернуть мои данные из Нокаута на мой сервер. Я получаю сообщение об ошибке «Для этого объекта не определен конструктор без параметров». Любая помощь будет оценена.

Моя модель нокаута выглядит следующим образом

        function partSummary(item) {
            var self = this;
            self.ID = ko.observable(item.ID);
            self.serialNumber = ko.observable(item.SerialNumber);
            self.description = ko.observable(item.Description);
            self.manufacturer = ko.observable(item.Manufacturer);
            self.creationDate = ko.observable(item.DateCreated);
            self.active = ko.observable(item.IsActive);
        }

Мой код для отправки данных обратно на сервер:

self.savePart = function() {
                $.ajax("/PartKO/UpdatePart", {
                    data: ko.toJSON(self.partDetails),
                    type: "post",
                    contentType: 'application/json',
                    dataType: 'json'
                });
            };

Мой контроллер MVC -

[HttpPost]
    public JsonResult UpdatePart(PartDetail part)
    {
        var dbPart = new PartGenericAccessor();
        dbPart.ID = part.ID;
        dbPart.Load();
        dbPart.Description = part.Description;
        dbPart.IsActive = Convert.ToBoolean(part.IsActive);

        var manufacturers = ManufacturerAccessor.LoadAll<ManufacturerAccessor>();
        if (part.Manufacturer != null)
        {
            var manufacturer = (from p in manufacturers where p.Name == part.Manufacturer select p.ID).First();
            dbPart.ManufacturerID = manufacturer;
        }

        dbPart.Save();

        return Json("Success!!");
    }

И моя модель на стороне сервера

    public class PartDetail
{
    public PartDetail(Guid id, string serial, string description, string manufacturer, DateTime created, bool isActive)
    {
        ID = id;
        SerialNumber = serial;
        Description = description;
        Manufacturer = manufacturer;
        DateCreated = created.ToShortDateString();
        IsActive = isActive.ToString(CultureInfo.InvariantCulture);

    }

    public Guid ID { get; set; }

    public string SerialNumber { get; set; }

    public string Description { get; set; }

    public string Manufacturer { get; set; }

    public string DateCreated { get; set; }

    public string IsActive { get; set; }
}

Ответы [ 2 ]

5 голосов
/ 09 января 2012

Вам необходимо предоставить конструктор без параметров для вашей модели MVC:

public class PartDetail
{
    public PartDetail()
    { ...  }
}

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

0 голосов
/ 10 мая 2012

Однажды я допустил глупую ошибку:

Именованный аргумент контроллера 'action' - и всегда публиковал его null .

[HttpPost]
public JsonResult AddMetaAction(ActionModel action)

Я не знал ои потратить на отладку и решение этой проблемы около получаса: (

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