2013-05-29 4 views
0

Я новичок в WebApi, и у меня проблема с полученными параметрами сообщения. Я хочу заполнить jqgrid данными, полученными от метода контроллера webapi.Параметры сообщения WepApi равны нулю

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

buildPostData: function (postData) { 

      var parameters = { 
       page: postData.page, 
       rows: postData.rows, 
       sidx: '', 
       sord: '', 
       _search: false, 
       searchField: '', 
       searchString: '', 
       searchOper: '', 
       filter: { groupOp: '', rules: [] } 
      }; 

      $.extend(parameters, postData); 

      var data = { 
       parameters: parameters 
      }; 

      return JSON.stringify(data); 
     } 

bindGridAllData: function() { 

      var viewModel = this; 

      jQuery("#AllDataGrid").jqGrid({ 
       url: 'api/DataApi/GetAllData', 
       datatype: 'json', 
       mtype: 'POST', 
       ajaxGridOptions: { 
        contentType: 'application/json; charset=utf-8' 
       }, 
       serializeGridData: viewModel.buildPostData, 
       serializeRowData: function (data) { 
        return JSON.stringify(data); 
       }, 
       jsonReader: { repeatitems: false, root: "d.rows", page: "d.page", total: "d.total", records: "d.records" }, 
       colNames: ['DataId', 'Title', 'Description', 'Date', 'UserId', 'Name', 'Surname', 'PicturePath', 'NumberOfComments', ''], 
       colModel: [ 
         { name: 'DataId', index: 'DataId', width: 10, hidden: true, editable: false, sortable: false, key: true }, 
         { name: 'Title', index: 'Title', width: 10, editable: false, align: 'left', sortable: true, hidden: true }, 
         { name: 'Description', index: 'Description', width: 10, editable: false, align: 'left', sortable: true, hidden: true }, 
         { name: 'Date', index: 'Date', width: 10, editable: false, align: 'left', sortable: true, hidden: true }, 
         { name: 'UserId', index: 'UserId', width: 10, editable: false, align: 'left', sortable: true, hidden: true }, 
         { name: 'Name', index: 'Name', width: 10, editable: false, align: 'left', sortable: true, hidden: true }, 
         { name: 'Surname', index: 'Surname', width: 10, editable: false, align: 'left', sortable: true, hidden: true }, 
         { name: 'PicturePath', index: 'PicturePath', width: 10, editable: false, align: 'left', sortable: true, hidden: true }, 
         { name: 'NumberOfComments', index: 'NumberOfComments', width: 10, editable: false, align: 'left', sortable: true, hidden: true }, 
         { 
          name: 'DataInformation', index: 'DataInformation', width: 200, editable: false, align: 'left', sortable: true, formatter: function (cellvalue, options, rowObject) { 
           var template = $('<div data-bind="template: { name: \'DataRecord\', data: DataRecord, ajax: { async: false } }"></div>'); 
           var data = { DataRecord: rowObject }; 
           ko.applyBindings(data, template[0]); 

           return template.html(); 
          } 
         } 
       ], 
       height: '100%', 
       width: 900, 
       pager: '#resultGridAllDataPager', 
       rowNum: 10, 
       rownumbers: false, 
       scroll: false, 
       sortname: 'Date', 
       sortorder: "asc", 
       gridview: true, 
       hoverrows: false, 
       viewrecords: true, 
       cmTemplate: { title: false }, 
       loadComplete: function() { 
       } 
      }); 
     } 

И метод WebAPI является:

[HttpPost] 
    public JQGridData GetAllData(JQGridSearchParameters parameters) 
    { 
     using (dataMKbazaEntities context = new dataMKbazaEntities()) 
     { 
      JQGridData grid = new JQGridData(); 

      var allData = context.ispolniSITEpodatoci().ToList(); 

      List<object> data = new List<object>(); 

      foreach (var ad in allData) 
      { 
       data.Add(new { 
        DataId=ad.podatokID, 
        Title=ad.naslov, 
        Description=ad.opis, 
        Date=ad.datum, 
        UserId=ad.idKORISNIK, 
        Name=ad.ime, 
        Surname=ad.prezime, 
        PicturePath=ad.slika, 
        NumberOfComments=ad.brojKOMENTARI 
       }); 
      } 

      grid.rows = data; 
      grid.page = parameters.page; 
      grid.records = data.Count; 
      grid.total = (int)Math.Ceiling((float)data.Count/(float)parameters.rows); 

      return grid; 
     } 
    } 

При передаче данных, параметры имеют значения, определенные из buildPostData метода, но, когда они получены в методе контроллера WepApi они равны нулю.

Я пробовал с [FromBody] в методе webapi, но без успеха. код состояния в запросе HTTP 200 OK

+0

Почему вы используете 'POST' для получения данных? Разве 'GET' не верный путь? – vadim

+0

Да, но я хочу использовать POST, потому что я не хочу, чтобы данные, которые были отправлены в строку запроса – user1565840

+0

Извините, но я не вижу смысла в использовании функции 'buildPostData'. Почему вам нужно поместить все параметры, которые вы хотите отправить в GetAllData внутри объекта с параметрами свойств? Почему вы не используете просто 'return JSON.stringify (postData);' непосредственно? Вы не включаете определение 'JQGridSearchParameters', поэтому не можете получить полный ответ на свой вопрос. В любом случае я рекомендую вам прочитать [блог] (http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx), которые описывают два основные способы получения данных. Связывание и форматирование данных. – Oleg

ответ

0

Убедитесь в следующем:

  1. Ваше сырье запрос имеет заголовок Content-Type. Глядя на ваш код клиента, вы, кажется, отправляете его, но просто хотите убедиться, что он действительно отправлен по кабелю. У веб-API была ошибка, если вы не отправляете заголовок Content-Type, так как мы не знаем, какой форматир для десериализации содержимого, мы по умолчанию устанавливаем значение по умолчанию для типа C#. В этом случае это может быть «null». Это было исправлено позже и пока не доступно для публики.

  2. подготовьте следующую проверку, чтобы увидеть любые модели состояния ошибки: (! ModelState.IsValid)

    если { бросить новый HttpResponseException (Request.CreateErrorResponse (HttpStatusCode.BadRequest, this.ModelState)); }

Смежные вопросы