1

What is the proper way to pass an asp.net value into javascript? For instance, this line of code says I am missing a token..

<asp:ImageButton runat="server" ImageUrl="/ESDNET/Images/Icons/add.png" OnClientClick="return 'ShowNewNoteForm("<%# Eval("SuggestionID").ToString() %>");'/>
1
  • 1
    You are missing a " Commented Sep 13, 2013 at 19:38

4 Answers 4

3

eval is evil. You don't need to build JavaScript with server side code, it's a good way to cause yourself to have a massive headache.

To pass data to JavaScript, use custom [data-*] attributes and JSON.

ascx
<asp:ImageButton runat="server" ID="Button" />
ascx.cs
Button.Attributes["data-foo"] =
    new {
            bar = "baz",
            fizz = "buzz"
        }.ToJSON();
ToJSON extension method
public static string ToJSON(this object source)
{
    var jss = new JavaScriptSerializer();
    return jss.Serialize(source);
}
Access in JS via jQuery:
var foo;
foo = $('[data-foo]').data('foo');
console.log(foo.bar); //'baz'
console.log(foo.fizz); //'buzz';

One of the most important things about this setup is that C# will correctly JSON and HTML encode the data (in that order), following that, the JavaScript api will correctly decode the HTML attribute, and jQuery will correctly parse the JSON object.

What this means is that if you add special characters or encoded values to your C# object, you'll end up with those special characters or encoded values in your JavaScript object, without having to mess with anything to get it to work.

Sign up to request clarification or add additional context in comments.

Comments

2

Your quotes are wrong. You should open and close the OnClientClick assignment with, double quotes, and anything inside your javascript code should be single quotes. Then, inside your breaking tags, you need to go back to double quotes. This should work...

<asp:ImageButton runat="server" ImageUrl="/ESDNET/Images/Icons/add.png" OnClientClick="return ShowNewNoteForm('<%# Eval("SuggestionID").ToString() %>');"/>

1 Comment

I've tried this and it still barks at me as server tag being malformed
2

Finally pulled it off with the following:

 <asp:ImageButton runat="server" ID="addNote" ImageUrl="/ESDNET/Images/Icons/add.png" OnClientClick='<%# String.Format("return ShowNewNoteForm(\"{0}\")", Eval("SuggestionID")) %>'/>

1 Comment

Awesome. Glad I could help at least a little.
0

Try replacing the '\' with an additional '"'

 <asp:ImageButton runat="server" ID="addNote" ImageUrl="/ESDNET/Images/Icons/add.png" OnClientClick='<%# String.Format("return ShowNewNoteForm(""{0}"")", Eval("SuggestionID")) %>'/>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.