如何在Listview中正确使用UpdatePanel?

时间:2014-05-12 12:07:35

标签: c# asp.net updatepanel

我一直在解决一个问题,但我似乎没有找到解决问题的充分办法。我有以下代码:

<asp:ScriptManager EnablePartialRendering="true" ID="ScriptManager1" runat="server"></asp:ScriptManager>

 <asp:UpdatePanel ID="UpdatePanel" UpdateMode="Conditional" runat="server">
    <ContentTemplate>
    <asp:ListView ID="productList" OnItemDataBound="pharmaciesList_ItemDataBound" runat="server">
    <ItemTemplate>
        <asp:TextBox CssClass="span1"  ID="Units" runat="server" AutoPostBack="true" OnTextChanged="Units_TextChanged" />
        <asp:Literal runat="server" ID="Discount" />
    </ItemTemplate>
    <Triggers>
     <asp:AsyncPostBackTrigger ControlID="Units" EventName="TextChanged" />
     </Triggers>
    </asp:ListView>

背后的代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        productList.DataSource = this.LineItems;
        DataBind();
    }
}

protected void Unidades_TextChanged(object sender, EventArgs e)
{
    TextBox qtt = (TextBox)sender;
    var parent = qtt.Parent;
    while (!(parent is IDataItemContainer))
        parent = parent.Parent;

    ListViewDataItem listitem = parent as ListViewDataItem;

    Literal lit = listitem.FindControl("Descuento") as Literal;
    lit.Text = "A";
}

每个项目都包含一个文本框,其中包含单位和文字,应根据输入的金额更新新折扣(出于测试目的,我只希望此标签暂时更改为“A”)。即使在步调调试器后,在更改该列表中的文本框后执行lit.Text =“A”,文字也没有更新。

我做错了什么,我该怎么做才能正确更新?

谢谢

1 个答案:

答案 0 :(得分:0)

我很抱歉以前的代码因为我假设ListView是Listbox。实际上它永远无法在Listview中找到文本框。

虽然有一点可以肯定你需要在<trigger>之外写<ContentTemplate>

您使用Listview的任何特殊原因。如果你可以使用Listbox / Grid?