2014-01-21 51 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是一个二维数组,你可以在服务器端通过它循环,并在数据库中插入可以。