OnClientClick中的服务器标记

Ric*_*ett 8 asp.net

以下给出了"服务器标签格式不正确"的错误

<asp:LinkButton ID="DeleteButton" runat="server" CommandName="Delete" 
    OnClientClick="return confirm('Are you sure you want to delete <%# Eval("Username") %>?');">
    Delete
</asp:LinkButton>
Run Code Online (Sandbox Code Playgroud)

(这在用于显示用户列表的数据绑定ListView中使用.当您单击删除按钮时,将使用JavaScript确认对话框询问您是否确定)

那么,如何在包含JavaScript的字符串中嵌入服务器标签?

Bla*_*ael 18

问题是绑定块和单引号和双引号的使用.

<asp:LinkButton D="DeleteButton" runat="server" CommandName="Delete" OnClientClick='<%# CreateConfirmation(Eval("Username")) %>'>Delete</asp:LinkButton>
Run Code Online (Sandbox Code Playgroud)

然后在代码隐藏上添加函数...

Public Function CreateConfirmation(ByVal Username As String) As String
    Return String.Format("return confirm('Are you sure you want to delete {0}?');", Username)
End Function
Run Code Online (Sandbox Code Playgroud)

当绑定块用作属性的值时,您将注意到必须使用单引号.您的脚本还需要针对confirm函数的嵌入字符串参数的引号.你基本上用完了报价.


小智 7

我在www.asp.net上找到了这个答案

OnClientClick='<%# Eval("ProductName", "return confirm(""Delete the Product {0}?"")" ) %>'
Run Code Online (Sandbox Code Playgroud)

这将所有内容都放在标记中,以便后来进行维护的任何人都不会去寻找所有的部分.

  • 这几乎是正确的.OnClientClick ='<%#Eval("ProductName",@"return confirm(""删除产品{0}?"")")%>'或OnClientClick ='<%#Eval("ProductName","return"确认(\"删除产品{0}?\")")%>'为我工作; 基本上最里面的双引号是C#字符串中的双引号,应该相应地进行转义. (2认同)