ListView字段未发布

时间:2010-01-07 18:42:26

标签: asp.net listview webforms

我知道我以前做过这样的事情,但我不知道为什么现在不行。我有一个带有一些文本框的ListView。当我点击一个按钮时,我想从这些框中读出文本(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 个答案:

答案 0 :(得分:1)

您使用非持久对象作为DataSource的问题。

由于单击按钮,您将生成回发,而lv_chapters不包含任何项目。在foreach所在的行中设置断点,您将看到lv_chapters.Items为null,或者它的Count属性返回0.