2010-10-15 91 views
1

我使用的網絡瀏覽器套件本地數據庫中臨時存儲一些數據,當我要訪問我創建一個對象如何訪問在後面的代碼(C#/ ASP.NET)JavaScript對象

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'] 
} 

有沒有辦法從後面的代碼訪問這個對象,而不必填充textfields/labels/dropdowns,然後從那裏獲取值?

例子,因爲它現在是:

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); 
} 

編輯:

更新我的例子有點:

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 
} 

回答

3

你並不需要將其設置爲文本框以任何理由...

我可能會做一些像

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

否則,根據您的應用程序的流程,你可以發佈該對象以字符串形式發送到使用AJAX的服務器。

然後,您將不得不使用一種方法將該字符串解析回對象形成。我不熟悉c#,但我相信這很容易找到或寫出這樣的方法。

+0

由於我有很多行,是否可以爲每行創建一個新的隱藏文本字段,請將ID設置爲#hiddenInput和行號(i),然後將值設置爲patientString?如果是這樣,我想我必須點擊一個按鈕'Get all Customers',然後點擊另一個'同步'來做我想做的事情? – Morgan 2010-10-15 02:12:52

+0

所以我用var patientString = JSON.stringify(patient); var inputField = $(「」).attr('id',「hiddenField」+ i); $('#Patients')。append(inputField); $('#hiddenField'+ i).val(patientString); – Morgan 2010-10-15 02:46:56

+0

對不起......我沒有看到你的回覆。所以你有它的工作?這聽起來像它會工作得很好。另一種選擇是遍歷所有行並將每個患者對象附加到存儲所有患者的其他對象。然後,您可以將該對象串化並將其設置爲輸入...但無論如何工作:-) – 2010-10-15 04:13:21

1

如果你有很多領域要發送,您可以將JSON編碼爲一行,並將其放入單個多行文本字段(textarea)中。然後你可以在服務器上輕鬆解碼它。

+0

我有大約50個元素用於輸入數據,現在我將它插入到遠程數據庫中,並且它正在工作。但是,如果我假設瀏覽器數據庫中有10行,則必須填充字段,單擊保存,填充字段,單擊保存等。我希望將本地數據庫中的所有行都發送到服務器,如果可能的話,只需點擊一下即可。 – Morgan 2010-10-15 00:36:50

0

請記住 -

  1. 當你的服務器代碼運行,它建立了一個網頁對象,然後用它來生成HTML發送到瀏覽器。一旦生成的HTML頁面對象被銷燬。當瀏覽器顯示您的頁面時,您的服務器資源不再存在。
  2. 當瀏覽器提交頁面請求時,它將銷燬DOM顯示的任何頁面。所以當你的服務器啓動的時候,你的javascript不再存在了。

因此,這兩個系統通常是完全分開的。您可以通過在客戶端和服務器之間傳遞ajax json消息來解決此問題。

+0

感謝您的評論 – Morgan 2010-10-15 02:57:22

0

我會使用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 
} 

然後就是通過對服務器Dictionary對象反覆(鍵 - 對象參數值 - 這是值)。

相關問題