我在项目模板中的asp.net列表视图中。
<asp:ListView runat="server" ClientIDMode="Predictable" ClientIDRowSuffix="Texttranslations_key"ID="lvwTextitems">
这是我在itemtemplate中的代码:
<span runat="server" onclick="openDiv('<%= EditItemDiv.ClientID%>')" style="width: 450px;"><%# Eval("Translation")%></span>
<asp:panel runat="server" id="EditItemDiv" style="display:none">
<asp:TextBox runat="server" ID = "EditItemArea" TextMode ="MultiLine" Rows="12" Columns="50" Text="<%# Eval("Translation")%>">
</asp:TextBox>
现在我有两个问题。 首先是span:我想在函数openDiv()中使用asp:panel的clientID,所以我可以创建一些show hide功能。 但是,我得到了这个结果:
<span onclick="openDiv('<%= EditItemDiv.ClientID%>')" style="width: 450px;">
我的代码不是代码,而是纯文本,我不知道为什么?
其次,这一行给我一个运行时错误(服务器标签格式不正确):
<asp:TextBox runat="server" ID = "EditItemArea" TextMode ="MultiLine" Rows="12" Columns="50" Text="<%# Eval("Translation")%>">
有人可以帮帮我吗?
PS 起初我使用此代码生成id:“myid&lt;%#Eval(”Id“)%&gt;”但那也没锻炼......
PS 在使用Eval和&lt;%#%&gt;时,我总是遇到麻烦,所以这可能是一些愚蠢的事情(我希望)
答案 0 :(得分:2)
对于第一部分,您肯定需要使用绑定表达式:
<%# EditItemDiv.ClientID %>
&lt;%=%&gt; scriptlet没有每个项目的上下文。我假设你“解释”你说你试过的语法,那么之前没有用的是什么?
“服务器标签格式不正确”是因为您尝试在双引号内使用双引号。将外部更改为单引号:
Text='<%# Eval("Translation")%>'>
基本上,您不能嵌套类似的报价类型。内联脚本通常会要求您使用双引号,因为单引号在c#中具有不同的含义,但您可以使用double或single来进行标记参数引用。结果是,如果您需要内联脚本,请使用单引号来包装标记参数,这样可以释放您在其中使用双引号。
如果输出中需要更多单引号,例如要呈现javascript参数,只需使用'
即可。如果要渲染双引号,也可以使用"
。
OnClientClick='openDiv('EditItem(<%# Eval("something") %>');'
答案 1 :(得分:1)
正如我的评论和jamietre所说,修复绑定问题需要更改代码:
Text="<%# Eval("Translation")%>"
到
Text='<%# Eval("Translation")%>'
至于跨度的onclick问题,如果您只删除runat="server"
部分,它应该可以正常工作。我不知道为什么,但似乎添加这会导致控件对onclick属性进行编码。
如果您需要跨度上的runat =“server”,那么我将尝试找到另一种解决方案,但是没有保证。