简体   繁体   中英

Dynamically Add JS to an ASP.NET page and get results from the JS

Here's my issue:

Client(s) give me separate JS files which will run a check of some sort on the user's system (Browser type, are cookies enabled?, etc.) and a list of acceptable values to be returned from this check.

I want to run through each JS file when a user visits the site and compare the results to the list of acceptable values, then alert the user if they pass these requirements or not.

I'm currently using RegisterClientScriptBlock() to add the JS to the client's page, so it's being run, but I'm having issues getting the result value from the JS back to ASP.NET in order to do the comparison.

I've tried using hidden fields that the JS will dump the value to and ASP.NET will read from, but I'm having difficulty generating the hidden fields on demand (since I have no idea how many Js files the client could have) and have them work in the ASP.NET code.

Any help, or suggestions in the right direction would be awesome, thanks!

What I would do is have the results be an array of KeyValuePair objects that you would then serialize to JSON. So you create the javascript object type like so:

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

Then you would build up an array of KeyValuePairs like so:

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

So at the point when you are done with all your checks you would use the json2 serializer to serialize the array to json for storage in your hidden field.

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

On the server side you would use JavascriptSerializer to deserialize your json to an array of KeyValuePairs. Here is the msdn doc on that: JavaScriptSerializer Class Reference

So with this approach you only need one hidden field. So you don't need to dynamically create it which should simplify the server side retrieval quite a bit.

The above should work with minimal changes however I haven't run this through a compiler so there might be some minor syntax errors preset.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM