代码之家  ›  专栏  ›  技术社区  ›  Alek Davis

如何在ASPX的Repeater中填充UpdatePanel(而不是代码隐藏)?

  •  1
  • Alek Davis  · 技术社区  · 17 年前

    我有一个中继器,它显示项目列表(在类似网格的/表格视图中)。当用户单击某个项目时,我会在该项目下显示一个UpdatePanel,其中包含与该项目相关的其他信息(类似于Accordion控件)。我知道如何在代码隐藏中填充UpdatePanel的元素(我将Repeater控件中选定元素的ID作为CommandArgument传递,获取该ID的其他信息,并设置活动UpdatePanel控件的文本字段)。但是我想知道是否可以直接在ASPX中设置绑定(而不是代码隐藏)。当我使用 <%= %> 为UpdatePanel控件的文本字段分配页面属性值的语法,例如。 <%= Comment %>

    2 回复  |  直到 17 年前
        1
  •  1
  •   Tony Basallo    17 年前

    是否要显示显示其他信息的容器?“框”中是否有其他活动要求它是updatepanel?

    <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作为divid和onclick命令的唯一标识符。您还可以使用jquery、asp:controls或任何您想要的东西。

        2
  •  1
  •   Al W    17 年前

    最简单的方法是在更新面板中嵌套FormView。然后,在代码隐藏中,您只需获取附加信息,将其分配给FormView.DataSource,然后调用FormView.DataBind()。FormView中的所有内容都将使用<%#评估(“某些列”)%>语法。您可能需要使用FindControl()来获取对FormView的引用。我会帮你把代码打出来,但我会帮你省去一些麻烦,然后说 不要这样做。

    更新面板是处理ajax内容最低效的方法。要使所有这些都正确连接到这个转发器和服务器端代码,唯一的方法是要么拥有一个巨大的viewstate,要么在页面加载中重新绑定转发器。您正在将一个可能是300毫秒的请求转换为需要一秒钟或更长时间的请求!熟悉一个好的ajax框架,不要害怕编写真正的html。至少,使用Web服务加载带有标记的usercontrol。

    我知道更新面板很简单,而且是内置的。对于你正在做的事情,它甚至可能是足够的,但你必须抵制。你会很高兴你这么做的。