Передача переменных из Javascript в C # через формы? - PullRequest
3 голосов
/ 01 сентября 2011

У меня есть массив, который я храню внутри <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"] не является массивом. Что я делаю не так?

Ответы [ 4 ]

3 голосов
/ 01 сентября 2011

Пост HTML-формы не сохранит объект javascript (в данном случае массив). Вы должны обратить внимание на преобразование вашего массива в 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 #, используя что-то вроде этого:

Добавить ссылку на JavaScriptSerializer из System.Web.Extensions.dll (.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]);
}
1 голос
/ 01 сентября 2011

Вы не можете установить значение элемента ввода в массив в javascript.

Вы можете установить только строки в качестве значения элементов ввода.

Если вы хотите отправить несколько значений всервер, вы должны объединить несколько строк, и использовать разделитель, как канал '|'или запятую ',' ... и затем на сервере вам нужно разделить строку, используя этот разделитель.

0 голосов
/ 01 сентября 2011

Вы можете прочитать значение из ввода, оценить его, а когда вы опубликуете форму, записать в строку свою переменную и записать ее во вход (функции JSON.stringify и eval).

0 голосов
/ 01 сентября 2011

Вам необходимо присвоить имя скрытому элементу формы с помощью [] (например, trees []). Затем, когда вы хотите добавить новое значение в массив, добавьте в форму еще один элемент DOM, скрытый тип ввода с тем же именем (и новым значением).

После публикации я думаю, что вы сможете получить к ним доступ в C # в виде строки значений, разделенных запятыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...