2011-01-10 63 views
1

這裏結果是我的問題:動態JS添加到ASP.NET頁面,並從JS

客戶端(S)給我,這將在用戶的系統上運行某種形式的檢查單獨的JS文件(瀏覽器類型,Cookies是否啓用?等等)以及從該檢查中返回的可接受值的列表。

我想在用戶訪問網站並將結果與​​可接受值列表進行比較時運行每個JS文件,然後在用戶通過這些要求時提醒用戶。

我目前使用RegisterClientScriptBlock()將JS添加到客戶端的頁面,所以它正在運行,但我有問題從JS獲取結果值返回到ASP.NET以便進行比較。

我試過使用隱藏的字段,JS將轉儲值和ASP.NET將讀取,但我有困難生成隱藏字段的需求(因爲我不知道有多少Js文件的客戶端可以)並讓他們在ASP.NET代碼中工作。

任何幫助,或建議在正確的方向將是真棒,謝謝!

回答

1

我會做的是將結果作爲KeyValuePair對象的數組,然後將序列化爲JSON。所以,你創建的JavaScript對象類型,像這樣:

function KeyValuePair(key, value){ 
    this.Key = key; 
    this.Value = value; 
} 

,那麼你會建立KeyValuePairs的數組,像這樣:

//This array is declared in the global scope 
var ValueArray = new Array(); 

function someFunction(){ 
    //this assumes that the key and value variables are created earlier in the function 
    var valueToStore = new KeyValuePair(key, value); 
    ValueArray[ValueArray.length] = valueToStore; 
} 

因此,在當你與你所有的檢查,你會做點使用json2 serializer將數組序列化爲json以存儲在隱藏字段中。

var jsonToSaveToHiddenField = JSON.stringify(ValueArray); 
//Logic to store resulting json and trigger the serverside evaluation here 

在服務器端,您將使用JavascriptSerializer將您的json反序列化爲一個KeyValuePairs數組。這是msdn文檔:JavaScriptSerializer Class Reference

所以這種方法只需要一個隱藏字段。所以你不需要動態地創建它,這應該可以簡化服務器端的檢索。

上面應該用最少的更改工作,但我沒有通過編譯器運行,所以可能會有一些小的語法錯誤預設。