2014-01-21 52 views
1

我有一個充滿用戶數據並檢查有效數據的2D javascript數組。到C#數據表的2D JavaScript數組?

我該如何去將二維數組傳遞給頁面後面的c#代碼? 我打算使用c#代碼在進一步處理後將其推送到數據庫。

從搜索似乎我需要得到它的某種類型的JSON傳遞給C#代碼,但我完全喪失瞭如何做到這一點,然後一旦我得到它,該怎麼做到C#代碼。

Javascript數組看起來像這樣

[["Q458","","100","85"], 
["Q459","TS","90","65"], 
["Q460","","80","15"]] 
+0

這不是2D嗎?二維數組看起來像這樣var x = [[1,2,3],[4,5,6]] –

+0

我的格式並不完整。我修好了。 – Josh

+0

您是否嘗試過將此字段作爲字符串傳遞給隱藏字段,並在後面的代碼中使用它 –

回答

2

有(可通過NuGet包管理器下載一個簡單的方法與Newtonsoft.Json庫來實現這一點 - 在Visual Studio中點擊工具 - >庫包管理器 - >管理NuGet軟件包爲此解決方案並搜索「Json」)。

首先你發送這個數組到你的代碼隱藏 - 可能通過AJAX請求提供你的數組作爲參數。要創建一個JSON字符串你的數組對象,使用JSON-JS(https://github.com/douglascrockford/JSON-js)庫的stringify功能如下:

var jsonArrayString = JSON.stringify(your_array); 

這個字符串,你現在將發送到您的服務器,並使用Newtonsoft.Json反序列化到二維列表或數組:

JsonConvert.DeserializeObject<List<List<string>>>(yourJsonString); 
or 
JsonConvert.DeserializeObject<string[,]>(yourJsonString); 
1

要在MZetko的答案擴大,這裏是您可以使用jQuery和Json.Net使用的方法。

首先,您需要設置一種將js數組發送到您的c#代碼的方法。你可以使用像這樣的東西:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 

<script> 

     var items = [["Q458", "", "100", "85"], ["Q459", "TS", "90", "65"], ["Q460", "", "80", "15"]]; 
     sendToDb(items); 

     function sendToDb(inArr) { 
      var inString = JSON.stringify(inArr); 

      $.ajax({ 
       url: "/Handlers/some-generic-handler.ashx", 
       dataType: 'json', 
       type: 'post', 
       data: { myVar: inString }, 
       success: function (data) { 
        if (data.success == true) { 
         alert("Here's the first element in the array: " + data.firstElement) 
         alert(data.message); 
        } 

       }, 
       error: function (xhr, ajaxOptions, thrownError) { 
        alert(xhr.status); 
        alert(thrownError); 
       } 
      }); 
     } 
</script> 

現在,你需要建立一個處理程序,將回答ajax請求。這個頁面將使用Json.Net。該代碼將是這個樣子:

public class some_generic_handler : IHttpHandler 
{ 

    public void ProcessRequest(HttpContext context) 
    { 
     string myVar = ""; 
     if (!string.IsNullOrEmpty(System.Web.HttpContext.Current.Request.Form["myVar"])) { myVar = System.Web.HttpContext.Current.Request.Form["myVar"].Trim(); } 

     var myArr = JsonConvert.DeserializeObject<List<List<string>>>(myVar); 

     string firstElement = myArr[0][0]; 

     string response = String.Format(@"{{ ""success"" : true, ""message"" : ""Cool! We're done."", ""firstElement"" : ""{0}"" }}", firstElement); 

     context.Response.ContentType = "application/json"; 
     context.Response.Write(response); 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 

一定要通過PM安裝Json.Net>安裝,包裝Newtonsoft.Json,然後包括如下參考:

using Newtonsoft.Json; 

本演示將轉換將js數組轉換爲字符串,將其發送到您的處理程序頁面,處理程序頁面將該字符串反序列化爲ac#數組,將數組中的第一個元素髮送回初始頁面,然後初始頁面將警告第一個元素。在您的應用程序中,您可以使用處理程序頁面將數據插入到數據庫表中。

+0

我有這個工作,但不是上面這個確切的事情,但有沒有限制發送的數據量與JSON消息?當我在數組中只有幾條記錄進行測試時,它可以工作,但是當我嘗試使用超過1k條記錄的生產用例時,它不起作用。如果有配置更改,我需要做或類似的東西? – Josh

+0

您是否收到特定錯誤?對這些ajax錯誤進行故障診斷有時會很麻煩。我通常這樣做:在Chrome中運行頁面,右鍵單擊 - >檢查元素,單擊「網絡」選項卡,刷新頁面,然後您將能夠看到頁面some-generic-handler.ashx (或任何你命名的)......右鍵單擊 - >在新標籤中打開鏈接。有錯誤嗎?如果沒有錯誤,您的json是否有效(http://jsonlint.com/)? –

+0

另外,它看起來最大的POST大小取決於你的框架:http://stackoverflow.com/questions/15079397/maximum-default-post-request-size-of-iis-7-how-to-increase-64kb -65kb-limit –

0

您可以從客戶端通過這個使用asp:HiddenField

客戶

<asp:HiddenField runat="server" ID="myhf" Value="[['Q458','','100','85'], 
          ['Q459','TS','90','65'],['Q460','','80','15']]"/> 

服務器

var ser = new System.Web.Script.Serialization.JavaScriptSerializer(); 
    var strArray = ser.Deserialize<string[][]>(myhf.Value); 

現在strArray是一個二維數組,你可以在服務器端通過它循環,並在數據庫中插入可以。