如何将多个参数传递给Eval()?

Ian*_*oyd 12 asp.net

我有一些使用Eval生成对javascript函数调用的aspx代码:

ASP.NET(为便于阅读而包装):

<asp:LinkButton runat="server"
   OnClientClick='<%# Eval(
         "NodeGUID", 
         "return DoStuff(this, \"{0}\");") %>'
   Text="Do stuff" />
Run Code Online (Sandbox Code Playgroud)

这会生成类似于的javascript:

Javascript(为便于阅读而包装):

return DoStuff(this,
      "3F2504E0-4F89-11D3-9A0C-0305E82C3301"
   );
Run Code Online (Sandbox Code Playgroud)

注意: 我已经转换了生成的" 实体引用引号以便于阅读.

我现在需要在javascript函数调用中添加一个第三个参数,一个标题:

Javascript(为便于阅读而包装)

return DoStuff(this,
      "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
      "AllisonAngel.jpg"
   );
Run Code Online (Sandbox Code Playgroud)

注意: 我已经转换了生成的" 实体引用引号以便于阅读.


代码隐藏文件中已存在一个用于返回项目标题的函数:

C#(为了便于阅读,省略了代码):

protected string GetItemText(MySomething item)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

我知道可以使用类似于以下语法从aspx文件调用上述函数:

ASP.NET(包装,代码省略,为了便于阅读):

<asp:LinkButton ... runat="server"
   Text="<%# GetItemText((MySomething)Container.DataItem) %>" 
   ... />
Run Code Online (Sandbox Code Playgroud)

所以现在我想使用这个函数将第三个参数包含到javascript函数中.

从...开始:

<asp:LinkButton runat="server"
   OnClientClick='<%# Eval(
         "NodeGUID",
         "return DoStuff(this, \"{0}\", \"Todo - Insert caption here\");") %>'
   Text="Do stuff" />
Run Code Online (Sandbox Code Playgroud)

我需要改变:" Todo - Insert caption here"

打电话给: <%# GetItemText((MySomething)Container.DataItem) %>

盲目地尝试显而易见的:

ASP.NET(为便于阅读而包装):

<asp:LinkButton runat="server"
   OnClientClick='<%# Eval(
         "NodeGUID", 
         GetItemText((MySomething)Container.DataItem),
         "return DoStuff(this, \"{0}\", \"{1}\");") %>'
   Text="Do stuff" />
Run Code Online (Sandbox Code Playgroud)

但是抱怨,因为Eval()只需要两个参数.


我尝试了稍微不那么明显:

ASP.NET(包含可读性)

<asp:LinkButton runat="server"
   OnClientClick='<%# Eval(
         "NodeGUID", 
         "return DoStuff(this, 
               \"{0}\", 
               \""+GetItemText((MySomething)Container.DataItem)+"\");") %>'
   Text="Do stuff" />
Run Code Online (Sandbox Code Playgroud)

但这也不起作用.


相关问题

ASP.NET:如何从javascript访问转发器生成的元素?

asp.NET:如何访问转发器生成的元素?

Sco*_*vey 20

诀窍不是将多个项目传递给eval,而是将多个eval传递给您想要用于格式化数据的任何内容.您也可以这样做 - 这会将演示文稿保存在aspx文件中,就像您想要的那样......

<asp:LinkButton 
   runat="server" 
   OnClientClick='<%# string.Format(
          "return DoStuff(this, \"{0}\", \"{1}\");", 
          Eval("NodeGUID"), 
          GetItemText((MySomething)Container.DataItem)) %>' 
   Text="Do stuff" />
Run Code Online (Sandbox Code Playgroud)