使用NEXT按钮后,listview无法正常刷新

时间:2014-01-29 19:05:02

标签: c# asp.net listview

我有一个带有下拉列表选项的列表视图。我第一次进入listview并使用listview底部的NEXT按钮,它显示一切都很好。如果我将下拉列表更改为另一个选项,则第一次显示列表正常但如果我使用了NEXT按钮则不会刷新列表视图。我正在使用带有UpdatePanel的AJAX。我看到列表视图已正确填充(apt.Count()返回20条记录)。知道什么可能是错的吗?

我想我需要刷新或类似的东西可能是由于AJAX?

以下是代码behing

private void ListApt(int iIndexDdl)
{
    using (AptDataContext db = new AptDataContext())
    {
        var apt = from Apt in db.Apt
                  join Doctor in db.Doctor on Apt.DoctorId equals Doctor.Id

                       where Apt.doctorId == iIndexDdl && Apt.IsAvailable == true &&
                             Apt.dateApt >= DateTime.Now 
                       select Apt
                       ;

                  ListView1.DataSourceID = null;
                  ListView1.DataSource = apt;

                  int numberOfRecords = apt.Count();
                  if (numberOfRecords == 0)
                  {
                      lblMessage.Text = "No Appointement are available";
                  }

                  ListView1.DataBind();
    };
}

这是按钮在.aspx

中定义的位置
   <asp:DataPager ID="DataPager1" runat="server" >
      <Fields>
          <asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True" 
            ShowLastPageButton="True" />
      </Fields>
  </asp:DataPager>

2 个答案:

答案 0 :(得分:2)

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:ListView ID="ListViewPersons" runat="server" ItemPlaceholderID="ProductItem">
                <ItemTemplate>
                    <asp:Label runat="server" ID="LabelEmail" Text='<%# Eval("Email") %>'></asp:Label>
                    <asp:Label runat="server" ID="LabelName" Text='<%# Eval("Name") %>'></asp:Label>
                </ItemTemplate>
                <LayoutTemplate>
                    <asp:PlaceHolder runat="server" ID="ProductItem"></asp:PlaceHolder>
                </LayoutTemplate>
                <ItemSeparatorTemplate>
                    <hr />
                </ItemSeparatorTemplate>
            </asp:ListView>
            <asp:DataPager ID="DataPager1" runat="server" PagedControlID="ListViewPersons" 
                onprerender="DataPager1_PreRender">
                <Fields>
                    <asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True" ShowLastPageButton="True" />
                </Fields>
            </asp:DataPager>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="ListViewPersons" />
        </Triggers>
    </asp:UpdatePanel>

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindListView();                
        }
    }

    private void BindListView()
    {
        List<Person> persons = new List<Person>();
        for (int i = 0; i < 30; i++)
        {
            Person aPerson =new Person();
            aPerson.Email = "Email" + i.ToString();
            aPerson.Name = "Name" + i.ToString();
            persons.Add(aPerson);
        }

        ListViewPersons.DataSource = persons;
        ListViewPersons.DataBind();
    }        

    public class Person
    {
        public string Name { get; set; }
        public string Email { get; set; }
    }

    protected void DataPager1_PreRender(object sender, EventArgs e)
    {
        BindListView();
    }

http://www.codeproject.com/Questions/513399/UpdateplusPanelplusdataplusisplusnotplusrefreshing

http://ajax.net-tutorials.com/controls/updatepanel-control/

答案 1 :(得分:1)

1)您确定要检索更多记录吗?也许你在列表的最后。

2)在浏览器上使用调试模式。在从下拉列表中第一次刷新之后,可能会抛出一个错误,这将导致您的AJAX软化。

3)注意更新面板中的控件,以及哪些控件是更新的触发器。

你也应该挑衅地发布你的标记代码。问题很可能出在你的标记或控件和事件的连线上。