我有一个Repeater,它显示一个项目列表(在网格状/表视图中)。当用户单击某个项目时,我会在此项目下显示一个UpdatePanel,其中包含与该项目相关的其他信息(类似于Accordion控件)。我知道如何在代码隐藏中填充UpdatePanel的元素(我将Repeater控件中所选元素的ID作为CommandArgument传递,获取此ID的其他信息,并设置活动UpdatePanel控件的文本字段)。但我想知道我是否可以直接在ASPX中设置绑定(而不是代码隐藏)。当我使用<%= %>
语法为UpdatePanel控件的文本字段分配页面属性的值时,例如<%= Comment %>
,它有点工作,但它改变了转发器中所有UpdatePanel的字段。有没有办法将活动的UpdatePanel绑定到当前值并保持已绑定的UpdatePanel不变?
答案 0 :(得分:1)
您是否希望显示一个显示其他信息的容器? “框”中是否还有其他活动要求它是更新面板?
<asp:repeater>
<itemtemplate>
<%# Eval("Name") %> <%# Eval("LastName") %><br />
<span onclick="$get('<%# Eval("Id") %>')">View Age</span>
<div id="<%# Eval("Id")%>" style="display:none;">
Age: <%# Eval("Age") %>
</div>
<itemtemplate>
</asp:repeater>
我认为这是正确的,一些语法可能会稍微偏离(没有intellisense打字)。那会有用吗? 我使用ID作为div id和onclick命令的唯一标识符。你也可以使用jquery,asp:controls或其他你想要的东西。
答案 1 :(得分:1)
最简单的方法是在更新面板中嵌套FormView。然后,你需要在后面的代码中做的唯一事情是获取附加信息,将其分配给FormView.DataSource,并调用FormView.DataBind()。 FormView中的所有内容都将使用&lt;%#Eval(“SomeColumn”)%&gt;句法。您可能需要使用FindControl()来获取对FormView的引用。我会为你输入代码,但我会告诉你一些令人头疼的问题,并说不要这样做。
更新面板是执行任何ajax内容的最低效方法。使这个转发器和服务器端代码正确连接的唯一方法是要么拥有一个巨大的视图状态,要么在页面加载中重新绑定转发器。你正在将一个300毫秒的请求转变为需要花费一秒钟......或更长时间的东西!熟悉一个好的ajax框架,不要害怕编写真正的HTML。至少,使用一个web服务来加载带有标记的用户控件。
我知道更新面板很简单,而且它内置。它甚至可能适合您正在做的事情,但您必须抵制。你会很高兴的。