我有一个2D javascript数组,其中填充了用户数据并检查了有效数据。
如何将2D数组传递到我的c#代码页面后面? 我将在进一步处理后使用c#代码将其推送到数据库。
从搜索开始,似乎我需要将它传递给某种类型的json以将其传递给c#代码,但是我完全失去了如何准确地做到这一点,然后一旦我得到它就该做什么c#代码。
Javascript数组看起来像这样
[["Q458","","100","85"],
["Q459","TS","90","65"],
["Q460","","80","15"]]
答案 0 :(得分:2)
有一种简单的方法可以使用Newtonsoft.Json
库(可通过NuGet包管理器下载 - 在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 :(得分: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&gt;安装Json.Net;安装包Newtonsoft.Json,然后包含以下参考:
using Newtonsoft.Json;
此演示将js数组转换为字符串,将其发送到处理程序页面,处理程序页面将该字符串反序列化为ac#数组,将数组中的第一个元素发送回初始页面,然后是初始化页面将提醒第一个元素。在您的应用程序中,您将使用处理程序页面将数据插入到数据库表中。
答案 2 :(得分: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
是一个2D数组,你可以遍历它并进行数据库插入。