通过表单将变量从Javascript传递到c#
本文关键字:Javascript 表单 变量 | 更新日期: 2023-09-27 18:07:07
我有一个数组,我存储在一个<input type="hidden">
。这是我的代码。
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"]
不是数组。我做错了什么?
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)。