2017-12-27 409 views
3

控制器。我已经触轮附近的所有我能找到的关于该主题的问题,但我似乎无法得到它的工作,模型根本不会绑定。

虽然这将是很好能够绑定到一类实体,我会满足于仅仅能够处理“数组的数组”,但即使这似乎并没有工作。我无法将数组读取为控制器参数中的'数组'。

的追求

的HTML页面用的变量,但潜在的大量的复选框(> 500)需要与每个复选框两个唯一的引用发送的所有值(假值包括在内)回控制器用于处理。这两个唯一的引用是复选框的ID的一部分,并在添加到数组之前分开。

问题通过$ajax呼叫从MVC视图发帖时

,数据被字符串化(通过JSON.stringify())的控制器响应并初始化chkBox实体类的适当数量,但不填充类实例的属性。 (即我得到n个chkBox实体的所有设置为null所有属性

提琴手验证值才能发布,以JSON格式,如果我写我自己我ModelBinder的价值观做流中显示出来,所以数值实际上获得通过到控制器

如果我将一组三个单独的值传递给控制器​​,则会发生同样的情况,但是如果我将三组值作为单个数组传递,则控制器将以单个chkBox实体响应,但全部三个物业值设置为null

JAV ascript函数创建JS 'chkBox对象'

function chkBox(unqReference_01, unqReference_02, boolean) { 
    this.unqReference_01 = unqReference_01; 
    this.unqReference_02= unqReference_02; 
    this.IsChecked = boolean; 
} 

的Javascript鉴于

var _chkBoxes = []; 

$("input:checkbox[name^='chkCompetitor']").each(function() { 
    if (_chkBoxes.length < 5) { 
     var splitID = $(this).attr('id').split("_"); 
     var entry = new chkBox(splitID[1], splitID[2], true); 
     if (_chkBoxes.indexOf(entry) == -1) { 
      _chkBoxes.push(entry); 
     } 
    } 
}); 

//Submit _chkBoxes 
var updateMatrix = $.ajax({ 
    type: "POST", 
    dataType: 'json', 
    contentType: 'application/json; charset=utf-8', 
    //traditional: true, 
    url: '/Processing/updateMatrix', 
    data: JSON.stringify(_chkBoxes)   
}); 

原类:(在所产生的不正确的行为之一)

[SerializableAttribute] 
public class chkBox 
{ 
    String unqReference_01 { get; set; } 
    String unqReference_02 { get; set; } 
    String IsChecked { get; set; } 

    public chkBox() 
    { 

    } 
} 

编辑:解决方案(太简单了)

将所有类属性设置为public ...

编辑后的类别:

[SerializableAttribute] 
public class chkBox 
{ 
    public String unqReference_01 { get; set; } 
    public String unqReference_02 { get; set; } 
    public String IsChecked { get; set; } 

    public chkBox() 
    { 

    } 
} 

控制器:

[HttpPost] 
public JsonResult UpdateMatrix(General.chkBox[] chkBoxes) 
//public JsonResult UpdateMatrix(IEnumerable<General.chkBox> chkBoxes) 
//public JsonResult UpdateMatrix(string IsChecked, String unqReference_01, String unqReference_01) 
{ 

    return null; 
} 

使用:

  • ASP.NET MVC 5.2.3
  • EF 6.2.0
  • 的jQuery 3.2.1

阅读&尝试:

头截图

请注意,标题使用类&属性的实际名称,属性相匹配两端(即在JSON和类) uBoatKey = unqReference_01 uDivisionRaceKey = unqReference_02

enter image description here

+0

如果您打开Chrome控制台,请求中实际发送了什么? –

+0

嗨@CamiloTerevinto, 不知道你指的是什么,我大多使用FireFox(或Chrome),但如果我用Fiddler检查请求,我得到以下标题: POST/Processing/updateMatrix HTTP/1.1 Host:localhost:44352 User-Agent:Mozilla/5.0(Windows NT 6.1; Win64; x64; rv:57.0)Gecko/20100101 Firefox/57.0 接受:application/json,text/javascript,*/*; q = 0.01 Accept-Language:zh-CN,en; q = 0。5 Referer:https:// localhost:44352/Processing/ProcessEvent/c1cf6457-eb61-434a-98f9-0137d384 __RequestVerificationToken: Content-Type:application/json; charset = utf-8 X-Requested-With:XMLHttpRequest – mtholen

+0

我从头文件中删除了一些文本,因为它太长而无法发布为评论。 – mtholen

回答

0

@BrianRogers了最有用的评论,该类具有声明为 '只是'

String unqReference_01 {get; set;}

其属性这应该显然是

public String unqReference_01 {get; set;}

欢迎前往@BrianRogers提供评论。

相关问题