2017-12-27 280 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提供評論。

相關問題