通过表单将变量从Javascript传递到c#

本文关键字:Javascript 表单 变量 | 更新日期: 2023-09-27 18:07:07

我有一个数组,我存储在一个<input type="hidden">。这是我的代码。

Javascript:

var trees;
// called when the body loads
function BodyOnLoad()
{
  trees = document.getElementById("trees");
  trees.value = new Array();
}
// this is what isn't working
function AddTree()
{
  var i = trees.value.length;
  trees.value[i] = new Array();
  /***/
  trees.value[i]["branches"] = 5;
  trees.value[i]["trunk"]    = 0;
}

HTML: <input type="hidden" name="trees" id="trees" />

在c#中,Request.Form["trees"]不是数组。我做错了什么?

通过表单将变量从Javascript传递到c#

HTML表单post不会保留javascript对象(在本例中是Array)。如果需要保留数组对象,应该考虑将数组转换为JSON,并在表单中传递

将此脚本(JSON2)包含在您的页面中: JSON2

var treesArray;
// called when the body loads
function BodyOnLoad()
{
  treesArray = new Array();
}
function AddTree()
{
  var tree = new Array();
  //branches      
  tree[0] = "5";
  //trunk      
  tree[1] = "0";
  //name
  tree[2] = "Elm";
  treesArray[treesArray.length] = tree;
  document.getElementById("trees").value = JSON.stringify(treesArray);
}

然后在服务器端,你需要将JSON转换为c#数组,像这样:

从System.Web.Extensions.dll中添加对JavaScriptSerializer的引用。. NET 3.5 SP1

JavaScriptSerializer serializer = new JavaScriptSerializer();
string[][] trees = serializer.Deserialize<string[][]>(Request.Form["trees"]);
for(int i = 0; i < trees.Length; i++)
{
    Console.WriteLine("Branches:" + trees[i][0]);
    Console.WriteLine("Trunk:" + trees[i][1]);
    Console.WriteLine("Name:" + trees[i][2]);
}

javascript中不能将输入元素的值设置为数组。

只能设置字符串作为输入元素的值。

如果你想发送多个值到服务器,你必须连接多个字符串,并使用分隔符,如管道'|'或逗号','…然后在服务器上你需要分割字符串,通过使用分隔符

您需要使用[]来命名隐藏的表单元素(例如,trees[])。然后,当您希望向数组中添加一个新值时,将另一个DOM元素附加到表单中,这是一个具有相同名称(和新值)的隐藏输入类型。

发布后,我相信您将能够在c#中以逗号分隔的值字符串的形式访问它们。

您可以从输入中读取值,对其进行计算,当您将发布表单时,将变量字符串化并将其写入输入(JSON)。