How do I give JavaScript variables data from ASP.NET variables?

寵の児 提交于 2019-11-26 22:14:17

Probably best easiest to expose them as properties of your page (or master page if used on every page) and reference them via page directives.

 <script type="text/javascript">
     var userID = '<%= UserID %>';
     var courseID = '<%= CourseID %>';

     .... more stuff....
 </script>

Then set the values on Page_Load (or in the Page_Load for the master page).

  public void Page_Load( object source, EventArgs e )
  {

        UserID = Session["userID"];
        CourseID = Session["courseID"];
        ...
  }

All the answers here that suggest something like

var userID = '<%= UserID %>';

are all missing something important if the variable you are embedded can contain arbitrary string data. The embedded string data needs to be escaped so that if it contains backslashes, quotes or unprintable characters they don't cause your Javascript to error.

Rick Strahl has some suggestions for the escaping code needed here. Using Rick's code the embedded variable will look like this:

var userId = <%= EncodeJsString(UserID) %>;

Note that there are no quotes now, Rick's code wraps the escaped string with quotes.

David Hammond

@tvanfosson's answer is how I have normally done this in the past, but was just trying to think of something a bit more elegant. Thought I'd throw this out there.

You can set up a HashTable in the codebehind and also initialize a JavaScriptSerializer:

Protected json As New System.Web.Script.Serialization.JavaScriptSerializer
Protected jsvars As New Hashtable

Then set variables like this:

jsvars.Add("name", "value")

Then serialize the variables into JavaScript in your page:

<script type="text/javascript">
    var vars = <%=json.Serialize(jsvars)%>;
    alert(vars.name);
</script>

This ensures that all variables are properly escaped and also minimizes the code if you need to work with a lot of variables.

This article describes the most pragmatic solution several pragmatic solutions to your problem.

Shiva

Here are the steps that you will have to take:

In your code behind page:

private int _userId;
private int _courseId;
protected int CourseId
{
  get { return _courseId;}
  set { _courseId = value;}
}
protected int UserId
{
 get { return _userId;}

set { _userId = value;}
}

Step 2 : based on your requirement now you have to set up those properties. The catch is that these properties should be set before they are referenced from the JavaScript. Maybe something like this in the Page_Load event:

_userId = Session["userId"];
_courseId = Request.QueryString["CourseId"] != null ? Request.QueryString["CourseId"] : String.empty;

Of course you can parse them to appropriate types based on your requirements.

Finally, you can reference them in JavaScript as follows:

var currentUserId = '<% = UserId %>';
var currentCouseId = '<% = CourseId %>';

This should definitely work. I have used this approach many times.

In Passing .NET Server-Side Data to JavaScript, I list various approaches, including:

  1. Fetching Data by Making an AJAX Request
  2. Loading Data Through an External JavaScript File
  3. Opening a Persistent Connection with SignalR
  4. Attaching Data to HTML Elements
  5. Assigning Data Directly to a JavaScript Variable
  6. Serializing a .NET Object into a JavaScript Literal

You can also use HTTP cookies. That approach is nice if you need to pass values the other direction as well.

I am in the process of doing the same thing. I am just passing whatever values I may need upon initialization and such in the API object's constructor. I have not seen any requirements as to how the API object can be created, just how it is located in the SCO's code.

Allen Rice

I'm not sure about SCORM or .ashx files (no experience there) but as far as getting values from ASP.NET you can do all sorts of things like

var xyz = '<%= variable %>';

from within your ASP.NET page. There are various ways to accomplish this but the end result is that the ASP.NET page renders the values of the variable in the HTML (or JavaScript) that is sent to the browser.

This is a generic ASP.NET and JavaScript answer, there may be a more elegant solution out there for you.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!