Как получить доступ к объектам JavaScript в коде позади (C # / ASP.NET) - PullRequest
1 голос
/ 15 октября 2010

Я использую локальную базу данных веб-браузеров для временного хранения некоторых данных, и когда я хочу получить к ним доступ, я создаю объект

function patientSelectHandler(transaction, results) {
        var row = results.rows.item(0);
        var patient = new Object();

        patient.name = row['name']
        patient.dob = row['dob']
        patient.gender = row['gender']
}

Есть ли способ получить доступ к этому объекту из кода позади, безвам нужно заполнить текстовые поля / метки / выпадающие списки и затем получить значения оттуда?

пример как сейчас:

function patientSelectHandler(transaction, results) {
        var row = results.rows.item(0);
        var patient = new Object();

        patient.name = row['name']
        patient.dob = row['dob']
        patient.gender = row['gender']


        $('#txtPatientName').val(patient.name);
        $('#txtDOB').val(patient.dob);
    $('#ddlGender').val(patient.gender);
}

edit:

Немного обновить мой пример:

    var patientString = JSON.stringify(patient);
    var inputField = $("<input type='text' name='hiddenField" + i + "' id='hiddenField" + i + "'></input>");
    $('#Patients').append(inputField);
    $('#hiddenField' + i).val(patientString);

, а затем цикл в коде

            for (int i = 0; i <= count; i++)
            {
                string n = String.Format("{0}", Request.Form["hiddenField" + i]).ToString();
                JObject o = JObject.Parse(n);
                string name = (string)o["name"];
//now I can get all values into variables and use them when calling the web service
}

Ответы [ 4 ]

3 голосов
/ 15 октября 2010

Вам не нужно устанавливать его в текстовые поля по любой причине ...

Возможно, я бы сделал что-то вроде

var patientString = JSON.stringify(patient);
$('#myHiddenInput').val(patientString);

В противном случае, в зависимости от потока вашего приложения,Вы можете отправить этот объект в строковой форме на сервер, используя AJAX.

Затем вам придется использовать метод для анализа этой строки обратно в формирование объекта.Я не знаком с C #, но я уверен, что было бы легко найти или написать такой метод.

1 голос
/ 15 октября 2010

Если у вас есть много полей для отправки, вы можете JSON-кодировать все и поместить его в одно многострочное текстовое поле (textarea).Тогда вы можете легко декодировать его на сервере.

0 голосов
/ 15 октября 2010

Я бы использовал запись AJAX для хранения вашего объекта JSON на сервере.

var str = JSON.stringify(...);

$.ajax({

    type: "POST",

    contentType: "application/json; charset=utf-8",

    url: "Default.aspx/validate",

    data: str,

    error: function(XMLHttpRequest, textStatus, errorThrown) {

        ...
    },

    success: ajaxCallback,

    dataType: "json"

});

А на сервере

[WebMethod]
public static string validate(Dictionary<string, object> patient)
{
    ...
    //return your JSON response
}

А затем просто переберите объект словаря на сервере (ключ - параметр объекта, значение - это значение).

0 голосов
/ 15 октября 2010

Имейте в виду -

  1. Когда ваш серверный код выполняется, он создает объект страницы, который затем использует для генерации html-кода для отправки в браузер. Как только html генерируется, этот объект страницы уничтожается. К тому времени, когда браузер покажет вашу страницу, ресурсы вашего сервера уже не будут существовать.
  2. Когда браузер отправляет запрос на страницу, он уничтожает DOM для любой страницы, которую показывает. Таким образом, к моменту запуска вашего сервера ваш javascript уже не существует.

Таким образом, две системы обычно полностью разделены. Вы можете обойти это, передавая ajax json сообщения между клиентом и сервером.

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