将 asp.net 值传递给 javascript 的正确方法是什么?例如,这行代码说我缺少一个令牌..
<asp:ImageButton runat="server" ImageUrl="/ESDNET/Images/Icons/add.png" OnClientClick="return 'ShowNewNoteForm("<%# Eval("SuggestionID").ToString() %>");'/>
将 asp.net 值传递给 javascript 的正确方法是什么?例如,这行代码说我缺少一个令牌..
<asp:ImageButton runat="server" ImageUrl="/ESDNET/Images/Icons/add.png" OnClientClick="return 'ShowNewNoteForm("<%# Eval("SuggestionID").ToString() %>");'/>
eval 是邪恶的。您不需要使用服务器端代码构建 JavaScript,这是让您头疼的好方法。
要将数据传递给 JavaScript,请使用自定义[data-*]
属性和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 对象中使用这些特殊字符或编码值,而无需进行任何处理以使其正常工作。
你的报价是错误的。您应该使用双引号打开和关闭 OnClientClick 分配,并且您的 javascript 代码中的任何内容都应该是单引号。然后,在您的中断标签中,您需要返回双引号。这应该工作...
<asp:ImageButton runat="server" ImageUrl="/ESDNET/Images/Icons/add.png" OnClientClick="return ShowNewNoteForm('<%# Eval("SuggestionID").ToString() %>');"/>
最后通过以下方式将其拉下来:
<asp:ImageButton runat="server" ID="addNote" ImageUrl="/ESDNET/Images/Icons/add.png" OnClientClick='<%# String.Format("return ShowNewNoteForm(\"{0}\")", Eval("SuggestionID")) %>'/>
尝试用额外的 '"' 替换 '\'
<asp:ImageButton runat="server" ID="addNote" ImageUrl="/ESDNET/Images/Icons/add.png" OnClientClick='<%# String.Format("return ShowNewNoteForm(""{0}"")", Eval("SuggestionID")) %>'/>