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

How to Properly pass Eval to javascript function?

本文关键字:javascript 函数 Eval 正确地      更新时间:2023-09-26

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

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

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 对象中得到这些特殊字符或编码值,而无需弄乱任何内容即可使其工作。

你的引号是错误的。 你应该打开和关闭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")) %>'/>