我有一些使用Eval生成对javascript函数调用的aspx代码:
ASP.NET(为便于阅读而包装):
<asp:LinkButton runat="server"
OnClientClick='<%# Eval(
"NodeGUID",
"return DoStuff(this, \"{0}\");") %>'
Text="Do stuff" />
这会生成类似于:
的javascriptJavascript(为便于阅读而包装):
return DoStuff(this,
"3F2504E0-4F89-11D3-9A0C-0305E82C3301"
);
注意: 我已将生成的&amp; quot; 实体引用转换为引号以便于阅读。
我现在需要在javascript函数调用中添加一个第三个参数,标题为:
Javascript(为便于阅读而包装)
return DoStuff(this,
"3F2504E0-4F89-11D3-9A0C-0305E82C3301",
"AllisonAngel.jpg"
);
注意: 我已将生成的&amp; quot; 实体引用转换为引号以便于阅读。
代码隐藏文件中已经存在一个函数,用于返回项目的标题:
C#(为了便于阅读,省略了代码):
protected string GetItemText(MySomething item)
{
...
}
我知道可以使用类似于
的语法从aspx文件调用上述函数ASP.NET(包装,代码省略,为了便于阅读):
<asp:LinkButton ... runat="server"
Text="<%# GetItemText((MySomething)Container.DataItem) %>"
... />
所以现在我想使用这个函数将第三个参数包含到javascript函数中。
从:
开始<asp:LinkButton runat="server"
OnClientClick='<%# Eval(
"NodeGUID",
"return DoStuff(this, \"{0}\", \"Todo - Insert caption here\");") %>'
Text="Do stuff" />
我需要更改:“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" />
但是抱怨,因为Eval()只有两个参数。
我尝试了稍微不那么明显的事情:
ASP.NET(为便于阅读而包装)
<asp:LinkButton runat="server"
OnClientClick='<%# Eval(
"NodeGUID",
"return DoStuff(this,
\"{0}\",
\""+GetItemText((MySomething)Container.DataItem)+"\");") %>'
Text="Do stuff" />
但这也不起作用。
相关问题
ASP.NET: How to access repeater generated elements from javascript?
答案 0 :(得分: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" />
答案 1 :(得分:3)
我的诡计
Eval(“FLName”,Eval(“FLFDID”,“{0}”)+“/ {0}”)
它对我有用!!
答案 2 :(得分:2)
Robert C. Barth给了我解决问题的想法:
<asp:LinkButton runat="server"
OnClientClick="<%# GetItemClientClick((MySomething)Container.DataItem) %>"
Text="Do stuff" />
然后代码隐藏文件包含:
protected string GetItemClientClick(MySomething item)
{
...
String szOnClientClick =
"return DeleteItem(this, "+
Toolkit.QuotedStr(item.NodeGUID.ToString()) + ", "+
Toolkit.QuotedStr(GetItemText(item))+");";
return szOnClientClick;
}
我真的更喜欢在aspx中保留演示文稿,在代码隐藏中保留业务逻辑 - 但现实世界通常不符合该模型。
答案 3 :(得分:1)
如果LinkButton不在其他东西中(比如网格),只需使用string.Format在正常情况下设置代码隐藏中的OnClientClick属性。
如果它在网格(或转发器,或那种性质的东西)中,使用FindControl或e.Row.Cells []和string.Format在RowDataBound事件中设置它。如果你使用e.Row.Cells [],你可以转储LinkButton服务器控件,只输出一个普通的锚标签。
答案 4 :(得分:0)
你可以试试这个
'<'asp:HyperLink ID="hp" runat="server" CommandArgument='<%# Eval("SysID", "{0}")%>'
NavigateUrl='<%# String.Format("~/ReportViewer.aspx?RevID= {0}
& User={1}", Eval("ID"), Eval("USER")) %>' Target="_blank" %>'>
</asp:HyperLink>
http://afzal-gujrat.blogspot.com/2012/10/pass-more-evals-in-querystring-with.html
答案 5 :(得分:0)
继续使用Scott Ivey的解决方案,您还可以使用它在Eval语句中包含if语句:
例如,如果属性 Url 存在,则下面将输出锚标记,否则将输出范围。
<%# string.Format(Eval("Url") != null ? "<a href=\"{0}\">{1}</a>" : "<span>{1}</span>", Eval("Url"), Eval("Text")) %>">