2016-07-22 82 views
0

我在MVC2工作和.NET Framework 3.5MVC 2 - JavaScript的数组控制器不工作

虽然试图通过一个单一的对象MVC控制器这是工作的罚款。但是当我尝试将值作为数组传递时,我在控制器中将属性值设置为null。

我正在使用下面的代码来执行此操作。

的JavaScript

var tdmsConfiguredLayersList = [{Id:1,Name:'Test1'},{Id:2,Name:'Test2'}]; 
    $.ajax({ 
      type: "POST", 
      //contentType: 'application/json; charset=utf-8', 
      //JSON.stringify({ layers: tdmsConfiguredLayersList }), 
      data:{layers:tdmsConfiguredLayersList}, 
      url: rootUrl + "Map/CatalogueDrawing", 
      dataType: "json", 
      success: function (result) { 
       debugger; 
      }, 
      error: function (errResult) { 
       debugger; 
      } 

    }); 

控制器代码

[HttpPost] 
public void CatalogueDrawing(List<LayerViewModel> layers) 
{ 

} 

Result that is returned

LayerViewModel类

public class LayerViewModel 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 
+1

反序列化你的commened代码是几乎没有。你需要添加'contentType:'application/json; charset = utf-8','并使用'data:JSON.stringify({layers:tdmsConfiguredLayersList})' –

+0

我也试过。但它不起作用 –

+0

它确实工作:)(并假设它的'MapController',然后使用'url:'@ Url.Action(“CatalogueDrawing”,“Map”)',' - 不要硬编码url的) –

回答

0

另一种方式来传递你的列表中的.NET 3.5控制器是将它们作为JSON字符串,并从控制器

using System.Web.Script.Serialization; 



var tdmsConfiguredLayersList = [{Id:1,Name:'Test1'},{Id:2,Name:'Test2'}]; 
    tdmsConfiguredLayersList = JSON.stringify(tdmsConfiguredLayersList); 
    $.ajax({ 
      type: "POST", 
      data: { jsonString: tdmsConfiguredLayersList }, 
      url: rootUrl + "Map/CatalogueDrawing", 
      dataType: "json", 
      success: function (result) { 
       debugger; 
      }, 
      error: function (errResult) { 
       debugger; 
      } 

    }); 


public void CatalogueDrawing(string jsonString) 
{ 
     var jss = new JavaScriptSerializer(); 
     List<LayerViewModel> layers = jss.Deserialize<List<LayerViewModel>>(jsonString); 
}