动态地将JS添加到ASP.NET页面并从JS获取结果

时间:2011-01-10 20:39:55

标签: javascript asp.net dynamic

这是我的问题:

客户端给我单独的JS文件,这些文件将在用户的系统上运行某种检查(浏览器类型,启用了cookie?等)以及从此检查返回的可接受值列表。< / p>

我希望在用户访问网站时运行每个JS文件,并将结果与​​可接受值列表进行比较,然后在用户是否通过这些要求时提醒用户。

我目前正在使用RegisterClientScriptBlock()将JS添加到客户端的页面,因此它正在运行,但是我在将结果值从JS返回到ASP.NET以进行比较时遇到问题。

我已经尝试使用JS将转储值的隐藏字段和ASP.NET将读取,但我很难按需生成隐藏字段(因为我不知道客户端有多少Js文件可能有)并让它们在ASP.NET代码中工作。

任何帮助,或正确方向的建议都会很棒,谢谢!

1 个答案:

答案 0 :(得分: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 doc:JavaScriptSerializer Class Reference

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

上面应该只进行很少的更改但是我没有通过编译器运行它,所以可能会预设一些小的语法错误。