2011-01-10 62 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

所以这种方法只需要一个隐藏字段。所以你不需要动态地创建它,这应该可以简化服务器端的检索。

上面应该用最少的更改工作,但我没有通过编译器运行,所以可能会有一些小的语法错误预设。