使用带参数的字符串格式来设置onclick

时间:2013-04-29 23:02:38

标签: c# asp.net button onclick

为什么这不起作用?

 <input type="button" id="btnAccept" value="Accept" onclick='<%# String.Format("accept('{0}','{1}','{2}','{3}-{4}');", Container.DataItem("PositionID"), Container.DataItem("ApplicantID"), Container.DataItem("FullName"), Container.DataItem("DepartmentName"), Container.DataItem("PositionTitle"))%>' />

onclick没有做任何事情。

1 个答案:

答案 0 :(得分:2)

最好的办法是查看生成的HTML。我认为以文本格式检查生成的HTML是非常好的习惯它一直在屏幕上呈现的方式。除了这样的错误(可以很容易地在生成的HTML中发现),它将帮助您捕获HTML的其他可能的无效使用,这些使用可能在一个浏览器中呈现,同时在另一个浏览器中呈现非常糟糕。 HTML渲染引擎使用许多技巧来尝试使无效的HTML看起来没问题。

无论如何,除了(例如,假设accept(...)存在,并且标签中的所有其他调用都是正确的),我认为您遇到的问题如下:

onclick='<%# String.Format("accept('{0}','{1}','{2}','{3}-{4}');", ... )%>'

这一行可能会评估看起来像这样:

onclick='accept('{0}','{1}','{2}','{3}-{4}');'

使用所有单引号,所有onclick属性都将显示为onclick='accept(',这不是有效的javascript方法调用。您将要使用“”字符串,您可以通过转义它们来嵌入格式字符串。

String.Format("accept(\"{0}\",\"{1}\",\"{2}\",\"{3}-{4}\");", ... )

然后,您应该能够在属性中获得'和'的正确组合:

onclick='accept("{0}","{1}","{2}","{3}-{4}");'