代码之家  ›  专栏  ›  技术社区  ›  Matthew Groves

未发布ListView字段

  •  -1
  • Matthew Groves  · 技术社区  · 15 年前

    我知道我以前做过类似的事情,但我不知道为什么它现在不起作用。我有一个列表视图和一些文本框。当我单击一个按钮(LinkButton,随便什么)时,我想从这些框中读取文本。

            <asp:ListView runat="server" ID="lv_bar" EnableViewState="true">
                <LayoutTemplate>
                    <table>
                        <tr>
                            <th>Foo</th>
                        </tr>
                        <tr runat="server" id="itemPlaceholder"></tr>
                    </table>
                </LayoutTemplate>
                <ItemTemplate>
                    <tr>
                        <td><asp:LinkButton ID="lb_delete" CausesValidation="false" runat="server" Text="Del" /></td>
                        <td><asp:TextBox id="txt_foo" runat="server" /></td>
                    </tr>
                </ItemTemplate>
            </asp:ListView>
            <asp:LinkButton ID="lb_add" CausesValidation="false" runat="server" Text="Add" />
    

    下面是相关的代码背后的东西:

    protected void Page_Load(object sender, EventArgs e)
    {
        lb_chapter_add.Click += lb_chapter_add_Click;
    
        if (!IsPostBack)
        {
                lv_chapters.DataSource = new List<Foo>() { new Foo() { Name = "harbl"} };
                lv_chapters.DataBind();
            }
        }
    
    void lb_add_Click(object sender, EventArgs e)
    {
        foreach (ListViewDataItem item in lv_bar.Items)
        {
            var txt_foo = (TextBox)item.FindControl("txt_foo");
            Response.Write("foo: " + txt_foo.Text);
        }
        Response.Write("<br />the end");
        Response.End();
    }
    

    但当我在txt foo中输入一些文本并单击lb_add时,我看到的只是“结束”。我在这里做错什么了?

    1 回复  |  直到 15 年前
        1
  •  1
  •   citronas    15 年前

    使用非持久对象作为数据源的问题。

    由于单击该按钮,您将生成回发,并且lv_章节不包含任何项目。在foreach所在的行中设置一个断点,您将看到lv_chapters.items为空,或者它的count属性返回0。