Json Данные из FrontEnd не вставляются в базу данных через серверную часть с использованием Knockout и MVC - PullRequest
0 голосов
/ 28 мая 2020

Я работаю над проектом, в котором я сохраняю кое-что из локального хранилища в свою базу данных с помощью Knockout и MVC. Проблема, с которой я сталкиваюсь, заключается в том, что данные, которые я указываю в контроллере, которые мне также нужно отправить на серверную часть, вставляются, но данные, которые я извлекаю из внешнего интерфейса, не вставляются. Вот мой интерфейс api. js:

 function Save(data){
        // var promise = appsecurity.postApiCall(root+'/Save', ko.toJSON(data));
        return appsecurity.putApiCall(root+'/Save', ko.toJSON(data));
    }

Файл проекта. js

         self.changeButtonText = function(){
         self.ProcurementbuttonText(!self.ProcurementbuttonText())
         self.ElementData = ko.observable(localStorage.getItem('ElementDataWidget'));
         self.scorecardIDLocalStorage = ko.observable(localStorage.getItem('scorecardId'));
         self.AllData = ko.observableArray([]);
         self.AllData.push(self.scorecardIDLocalStorage,self.ElementData);

         var JSONData = ko.toJSON(self.AllData);
         PreferentialProcurementDashboardApi.Save(JSONData);
         console.log((JSONData));


        }

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

Controller.cs:

 [HttpPut]
    [Route("Save")]
    [ValidateModel]
    //[TrackActivity(section: "Dashboard", actionType: UserActivityActionType.Update, actionDescription: "Create/Update dashboard View Entry")]

    public IHttpActionResult Save(DashboardConfigEditViewModel dashboardConfigEditViewModel)
    {
        //var databaseDetails = _prefentialDashboardConfigService.GetById(dashboardConfigEditViewModel.DashboardId);
        //if (databaseDetails != null)
        //{
        //    return AccessDenied();
        //}

        //int id = SaveDashboardConfigEditViewModel(dashboardConfigEditViewModel);
        //return Ok(id);

        dashboardConfigEditViewModel.DateCreated = DateTime.Now;
        dashboardConfigEditViewModel.UserId = this.GetUserId();
        _prefentialDashboardConfigService.Create(PreferentialProcurmentConfigViewModelMapper.MapToDomain(dashboardConfigEditViewModel));
        return Ok();
    }

My Mapper.cs:

 public static PrefentialDashboardConfig MapToDomain(DashboardConfigEditViewModel dashboardconfigeditviewmodel)
    {
        var config = new PrefentialDashboardConfig();
        config.DashboardId = dashboardconfigeditviewmodel.DashboardId;
        config.ScorecardId = dashboardconfigeditviewmodel.ScorecardId;
        config.UserId = dashboardconfigeditviewmodel.UserId;
        config.DateCreate = dashboardconfigeditviewmodel.DateCreated;
        config.DashboardConfig = dashboardconfigeditviewmodel.DashboardConfig;

        return config;
    }

My Dto.cs:

 public class DashboardConfigEditViewModel
{

    //public DashboardConfigEditViewModel()
    //{

    //}

    public int DashboardId { get; set; }

    public Guid ScorecardId { get; set; }

    public Guid UserId { get; set; }

    public DateTime DateCreated { get; set; }

    public string DashboardConfig { get; set; }

}

и это поля в моей базе данных:

Create Table [data].PrefentialDashboardConfig(
DashboardId int IDENTITY(1,1) PRIMARY KEY,
ScorecardId uniqueidentifier,
UserId uniqueidentifier,
DateCreate DateTime,
DashboardConfig varchar(255)

)

Теперь, если вы посмотрите на мой контроллер, я установил дату и идентификатор пользователя в бэкэнде, который будет вставлен в мою базу данных, но идентификатор карты показателей и конфигурация i получить от внешнего интерфейса, который не анализируется полностью до моего внутреннего интерфейса

1 Ответ

0 голосов
/ 29 мая 2020

Имя свойства в JSON (которое мы отправляем на сервер) должно совпадать с именем свойства класса MVC viewmodel (параметр метода Save ActionResult).

Вариант 1: Если вы используете метод ko.to JSON, тогда вам следует использовать вашу модель, как показано ниже:


var dashboardConfigEditViewModel = {
        ScorecardId:ko.observable(localStorage.getItem('scorecardId')),
        DashboardConfig:ko.observable(localStorage.getItem('ElementDataWidget'))
};

var JSONData = ko.toJSON(dashboardConfigEditViewModel);
PreferentialProcurementDashboardApi.Save(JSONData);


Вариант 2: Если вы не хотите использовать метод ko.to JSON. Вы можете использовать вариант ниже.


var dashboardConfigEditViewModel = {
        'ScorecardId':ko.observable(localStorage.getItem('scorecardId'))(),
        'DashboardConfig':ko.observable(localStorage.getItem('ElementDataWidget'))()
};


PreferentialProcurementDashboardApi.Save(dashboardConfigEditViewModel);

Примечание. вы используете JSON .stringify () для преобразования JSON в строку перед отправкой на сервер.

...