2017-07-14 96 views
0

我試圖在我們的應用程序中集中其中一個功能。在整個網站中,我們有很多地方可以讓用戶將表格(Syncfusion Grid)導出爲ex​​cel。我們遇到的一個問題是,每當用戶過濾/排序以維護新的表格數據佈局時,如果用戶確實想要導出,我們必須往返服務器,捅數據庫並運行附帶的腳本。我們的替代方案是每次用戶過濾或導出請求時發送過濾列。將JS對象數組傳遞給MVC控制器而不使用模型

我目前正試圖切換所有這些往返的最後一個選項,只有在發出請求時才發送數據來緩解一些來回。我想要做的是能夠將每個網格發送到單個控制器,從數據中可以找出要顯示的列。如果控制器接受列表< MODELNAME>,但是如果我遵循這種情況,我不確定它是否會起作用。我想我可以創建一個接受屬性的通用導出模型。需要注意的是,這些表由數據庫驅動,以限制在需求發生變化時修改它們所需的工作量。我們的客戶向我們報告的報告機構設定了要求,無論是我們還是我們的客戶,我們都不知道會發生什麼變化。更改存儲過程中返回的表會自動更新前面的表。這意味着如果該屬性先前不存在,那麼對數據庫的更改將需要對該模型進行後續更新。

足夠的背景,我試圖發送一個泛型數組到MVC控制器,在POC期間我正在使用一個已經存在的功能並嘗試修改它。

public void ExportAlertListToExcel(string name, List<object> grid, string ignore = "") 

中的數據低於使用jQuery

$.ajax({ 
     url: _url, 
     type: "POST", 
     dataType: 'json', 
     contentType: 'application/json; charset=utf-8', 
     data: JSON.stringify({ 'name': "Filler", 'grid': dataexport }), 
     success: function (data) { 
      // Do something neat 
     }, 
     complete: function() { }, 
     error: function (e) { 
      console.log(e); 
     } 
    }); 

的數據看起來像

[ 
{name: 'One', age: '10'}, 
{name: 'Two', age: '12'}, 
{name: 'Three', age: '14'}, 
{name: 'Four', age: '16'}, 
] 

但是,當它擊中控制它的值將使用AJAX發送到服務器無論使用List,Array還是IEnumerable,只需返回{object}即可。我試過不把所發送的數據字符串化並對數組內的對象數組進行字符串化。在我將數據提取到一個字符串的情況下,我無法將其轉換爲可以訪問每個項目發送的數據值的對象。我覺得這應該是一件小事,但我似乎無法圍繞如何去解決這個問題。我試過序列化,反序列化,傳遞字符串來嘗試訪問數據。

+0

如果您嘗試在控制器操作中接受JObject,會發生什麼情況?(我從來沒有試過) –

+0

@Joe_DM我試過了,吐出500錯誤。 – TheHamstring

+0

我也試過了,JObject失敗了,但它與JArray一起工作,因爲它是一個列表。我能夠讓你的樣本以這種方式工作。 –

回答

0

你有兩個基本類型參​​數和一個複合您可以使用自定義路線爲您的操作,如: 控制器/動作/ {名}/{忽略} 然後重新排列你的參數:

public void ExportAlertListToExcel(string name , string ignore = "",object grid) 

$.ajax({ 
    url: 'contrller/action?name=filler&ignore=c', 
    type: "POST", 
    dataType: 'json', 
    contentType: 'application/json; charset=utf-8', 
    data: dataexport, 
    success: function (data) { 
     // Do something neat 
    }, 
    complete: function() { }, 
    error: function (e) { 
     console.log(e); 
    } 
}); 

後檢索代碼中的對象將其轉換爲對象列表並對其進行處理。

0

JSON數組數據類型是字符串。你試過這個嗎?

public void ExportAlertListToExcel(string grid) 


$.ajax({ 
    url: 'contrller/action?name=filler&ignore=c', 
    type: "POST", 
    dataType: 'json', 
    contentType: 'application/json; charset=utf-8', 
    data: dataexport, 
    success: function (data) { 
     // Do something neat 
    }, 
    complete: function() { }, 
    error: function (e) { 
     console.log(e); 
    } 
}); 
+0

我有,網格參數讀爲'null' – TheHamstring

+0

@TheHamstring如果你的原始json字符串爲null,那麼你永遠不會能夠反序列化它...我認爲別的東西一定會發生,因爲它聽起來像你根本沒有得到任何json。 –

0
嘗試

此,我有它的工作和在我的控制器作爲我的自定義對象陣列結合

$('#costRowAdd').click(function() { 
var shipmentCost = { 
    CarrierName: $("#AgentCarrierID").val(), 
    CostName: $("#ShipmentCostLineItems option:selected").html(), 
    Quantity: $("#ShipmentCostqty").val().replace(',', ''), 
    Rate: $("#ShipmentCostrate").val().replace('$', '').replace(',', ''), 
    EstimatedCost: $("#ShipmentCostcharge").val().replace('$', '').replace(',', '') 
} 
var shipmentCosts = []; 
shipmentCosts.push(shipmentCost); 

$.ajax({ 
    url: 'AddShipmentCosts', 
    type: 'POST', 
    dataType: 'json', 
    data: { ShipmentCosts: shipmentCosts, ShipmentNumber: $('#ShipmentNumber').val() }, 
    success: function (data) { 

     LoadShipmentCosts($("#ShipmentNumber").val()); 
     $("#ShipmentCostqty").val(''); 
     $("#ShipmentCostrate").val(''); 
     $("#ShipmentCostcharge").val(''); 

    } 
}); 

return false; 

});

相關問題