1

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

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

4 回答 4

3

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

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

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 对象中使用这些特殊字符或编码值,而无需进行任何处理以使其正常工作。

于 2013-09-13T19:40:50.920 回答
2

你的报价是错误的。您应该使用双引号打开和关闭 OnClientClick 分配,并且您的 javascript 代码中的任何内容都应该是单引号。然后,在您的中断标签中,您需要返回双引号。这应该工作...

<asp:ImageButton runat="server" ImageUrl="/ESDNET/Images/Icons/add.png" OnClientClick="return ShowNewNoteForm('<%# Eval("SuggestionID").ToString() %>');"/>
于 2013-09-13T19:45:26.140 回答
1

最后通过以下方式将其拉下来:

 <asp:ImageButton runat="server" ID="addNote" ImageUrl="/ESDNET/Images/Icons/add.png" OnClientClick='<%# String.Format("return ShowNewNoteForm(\"{0}\")", Eval("SuggestionID")) %>'/>
于 2013-09-13T20:54:56.777 回答
0

尝试用额外的 '"' 替换 '\'

 <asp:ImageButton runat="server" ID="addNote" ImageUrl="/ESDNET/Images/Icons/add.png" OnClientClick='<%# String.Format("return ShowNewNoteForm(""{0}"")", Eval("SuggestionID")) %>'/>
于 2014-09-19T07:45:15.947 回答