asp.net(4)listview给我带来了生成id的麻烦

时间:2011-01-10 14:09:51

标签: asp.net listview asp.net-4.0

我在项目模板中的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(&#39;&lt;%= EditItemDiv.ClientID%>&#39;)" 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;时,我总是遇到麻烦,所以这可能是一些愚蠢的事情(我希望)

2 个答案:

答案 0 :(得分:2)

对于第一部分,您肯定需要使用绑定表达式:

<%# EditItemDiv.ClientID %>

&lt;%=%&gt; scriptlet没有每个项目的上下文。我假设你“解释”你说你试过的语法,那么之前没有用的是什么?

“服务器标签格式不正确”是因为您尝试在双引号内使用双引号。将外部更改为单引号:

Text='<%# Eval("Translation")%>'>

基本上,您不能嵌套类似的报价类型。内联脚本通常会要求您使用双引号,因为单引号在c#中具有不同的含义,但您可以使用double或single来进行标记参数引用。结果是,如果您需要内联脚本,请使用单引号来包装标记参数,这样可以释放您在其中使用双引号。

如果输出中需要更多单引号,例如要呈现javascript参数,只需使用&#39;即可。如果要渲染双引号,也可以使用&#34;

OnClientClick='openDiv(&#39;EditItem(<%# Eval("something") %>&#39;);'

答案 1 :(得分:1)

正如我的评论和jamietre所说,修复绑定问题需要更改代码:

Text="<%# Eval("Translation")%>"

Text='<%# Eval("Translation")%>'

至于跨度的onclick问题,如果您只删除runat="server"部分,它应该可以正常工作。我不知道为什么,但似乎添加这会导致控件对onclick属性进行编码。

如果您需要跨度上的runat =“server”,那么我将尝试找到另一种解决方案,但是没有保证。