如何正确地将Eval传递给javascript函数?

时间:2013-09-13 19:35:39

标签: javascript asp.net

将asp.net值传递给javascript的正确方法是什么?例如,这行代码说我缺少一个令牌..

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

4 个答案:

答案 0 :(得分:3)

eval是邪恶的 。您不需要使用服务器端代码构建JavaScript,这是让您自己头疼的好方法。

要将数据传递给JavaScript,请使用自定义[data-*] attributesJSON

<子> ASCX
<asp:ImageButton runat="server" ID="Button" />
<子> ascx.cs
Button.Attributes["data-foo"] =
    new {
            bar = "baz",
            fizz = "buzz"
        }.ToJSON();
ToJSON扩展方法
public static string ToJSON(this object source)
{
    var jss = new JavaScriptSerializer();
    return jss.Serialize(source);
}
通过jQuery访问JS:
var foo;
foo = $('[data-foo]').data('foo');
console.log(foo.bar); //'baz'
console.log(foo.fizz); //'buzz';

关于此设置最重要的一点是C#将正确地对数据进行JSON和HTML编码(按此顺序),然​​后,JavaScript api将正确解码HTML属性,jQuery将正确解析JSON对象

这意味着如果您向C#对象添加特殊字符或编码值,您将最终在JavaScript对象中使用这些特殊字符或编码值,而不必乱用任何东西来使其工作。

答案 1 :(得分:2)

你的报价错了。您应该使用双引号打开和关闭OnClientClick赋值,并且您的javascript代码中的任何内容都应该是单引号。然后,在破碎标签内,您需要返回双引号。这应该有用......

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

答案 2 :(得分:1)

最后用以下内容将其拉下来:

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

答案 3 :(得分:0)

尝试使用额外的'''

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