将动态对象列表绑定到转发器控件

时间:2016-03-25 14:15:05

标签: c# asp.net oop repeater

早上好,伙计们。我一直在处理一个简单的网站,里面有一个转发器和一个动态对象列表。我的数据设置与父对象包含四个其他对象的列表属性。

请求(父母)

  • 活动
  • 飞行
  • 饭店
  • 汽车

     <asp:Repeater ID="rptEvent" runat="server" EnableViewState="false">
                    <ItemTemplate>
                         <table class="tableStyle">
                            <tr>
                                <td colspan="4" class="headerLabel">
                                    CLIENT EVENT INFORMATION - <%# Eval("ProjectName") %>
                                </td>
                            </tr>
                            <tr>
                                <td class="regLabel row1">Company Name: (If Billable)</td>
                                <td colspan="3" class="row1">
                                    <asp:DropDownList ID="cboClientName" runat="server" AutoPostBack="true" CssClass="dropDownClass1" DataSource='<%# Eval("ClientName") %>' SelectedValue='<%# Eval("SelectedClientName") %>' ClientIDMode="Static" OnSelectedIndexChanged="cboClientName_SelectedIndexChanged"></asp:DropDownList>
                                </td>
                            </tr>
                            [...more items...]
                        </table> 
                        <asp:Panel runat="server" ID="pnlAdd" Visible="<%# Container.ItemIndex + 1 == tempRequest.events.Count && tempRequest.events.Count < 3 %>">
                            <asp:Label runat="server" CssClass="regLabel" Text="Would you like to add another destination?&nbsp;&nbsp;&nbsp;" />
                            <asp:CheckBox ID="inptAdditionalInfo" AutoPostBack="true" runat="server" OnCheckedChanged="inptAdditionalInfo_CheckedChanged" /><br /><br />
                        </asp:Panel>
                   </ItemTemplate>
              </asp:Repeater>
    

这里发生的是页面最初在每个属性列表中加载一个对象,一切都很棒,看起来很棒。每个对象包含不同的属性类型。字符串列表,单个字符串属性,dateTime属性等,我有我认为是将这些值绑定到对象的正确语法。但是,当用户选中复选框以添加更多项目时,会出现此问题。

页面在其他任何事情发生之前重新加载,这会创建初始数据的“重新启动”,并且数据不会持续存在。我在后面的代码中有一个更新方法,我认为它可以正常工作。

   protected void UpdateRequest() {

    for (int i = 0; i <= tempRequest.events.Count - 1; i++)
    {
        // Set the Event ===============================================================================
        var temp = (DropDownList)rptEvent.Items[i].FindControl("cboClientName");
        tempRequest.events[i].SelectedClientName = temp.SelectedItem.ToString();

它不起作用,我没有得到持久数据。如何将每个转发器控件的值正确绑定到正确对象中的正确项? IE:ClientName从转发器的第二个索引到对象列表的第二个索引?

我希望我已经为这个问题提供了足够的信息。

1 个答案:

答案 0 :(得分:0)

经过大量的研究和挖掘,我发现了一些东西。一,我需要使用ViewState []来保持点击和刷新之间的持久数据。其次,将数据保存到对象的顺序有点倒退。

我现在已经修好了。谢谢你的阅读。