将asp.net值传递给javascript的正确方法是什么?例如,这行代码说我缺少一个令牌..
<asp:ImageButton runat="server" ImageUrl="/ESDNET/Images/Icons/add.png" OnClientClick="return 'ShowNewNoteForm("<%# Eval("SuggestionID").ToString() %>");'/>
答案 0 :(得分:3)
eval是邪恶的 。您不需要使用服务器端代码构建JavaScript,这是让您自己头疼的好方法。
要将数据传递给JavaScript,请使用自定义[data-*]
attributes和JSON。
<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")) %>'/>