2017-02-05 3 views
0

Я отправляю JSON на контроллер, но проблема в том, что я получаю правильный счет в списке. Если JSON имеет два списка элементов, имеет счет двух, но нулевых данных. Ниже приведен код, через который я делаю и отправляю JSON. Я использую TabletoJSON для создания JSON.Публикация JSON на контроллер MVC 5

 $('#productsObj').click(function() { 
      var rawMaterials = $('#productsTable').tableToJSON(
         { 
          ignoreColumns: [3] 
         }); 

      alert(JSON.stringify(rawMaterials)); 
      console.log(rawMaterials); 

       $.ajax({ 
        url: "/Supplies/insertRawMaterial", 
        type: "POST", 
        data: JSON.stringify(rawMaterials), 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        traditional: true, 
        error: function (response) { 
         alert(response.responseText); 
        }, 
        success: function (response) { 
         alert(data); 
         alert(response); 
        } 
       }); 

     }); 

Ниже приведен метод действия контроллера, который принимает данные.

public ActionResult insertRawMaterial(List<String> data) 
    { 

     if (data != null) 
     { 
      return Json("Success"); 
     } 
     else 
     { 
      return Json("An Error Has occoured"); 
     } 

    } 

Я не уверен, где я делаю это неправильно. Ниже приведен JSON в режиме предупреждения.

[{"Raw Material Name":"Asphalt","Short Code":"AS02","Price":"20"}] 
+1

Пожалуйста, покажите нам полезную информацию JSON из ваших инструментов разработчика. – Amy

+1

Похоже, вы вызываете 'JSON.stringify' на то, что уже является строкой JSON. – haim770

+0

@ haim770 Я удалил JSON.strigify, получив 500 из контроллера. –

ответ

1

Вы не можете возможно ожидать отобразить эту сложную структуру JSON для списка строк (List<String>), что ваши действия контроллера в настоящее время принимает в качестве параметра:

[{"Raw Material Name":"Asphalt","Short Code":"AS02","Price":"20"}] 

Таким образом, вы можете начать с определения подходящего вида модели, которые будут отражать эту структуру (или почти, см. технику массажа, которая требуется ниже):

public class MaterialViewModel 
{ 
    public string Name { get; set; } 

    public string ShortCode { get; set; } 

    public decimal Price { get; set; } 
} 

, который будет действовать вашим контроллером принимать в качестве параметра:

public ActionResult insertRawMaterial(IList<MaterialViewModel> data) 
{ 
    ...  
} 

и, наконец, помассируйте данные на клиенте, чтобы соответствовать имена правильно собственности (имя, SHORTCODE и цена, конечно):

// we need to massage the raw data as it is crap with property names 
// containing spaces and galaxies and stuff 
var massagedRawMaterials = []; 

for (var i = 0; i < rawMaterials.length; i++) { 
    var material = rawMaterials[i]; 
    massagedRawMaterials.push({ 
     name: material['Raw Material Name'], 
     shortCode: material['Short Code'], 
     price: material['Price'] 
    }); 
} 

$.ajax({ 
    url: "/Supplies/insertRawMaterial", 
    type: "POST", 
    data: JSON.stringify(massagedRawMaterials), 
    contentType: "application/json; charset=utf-8", 
    ... 

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

+0

Работал как шарм. Проголосуйте, может быть :) –

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