0

I am trying to "search within your database". The first form is WebForm1.aspx which work fine and when I search on second form (entry.aspx) still it works fine, but the major problem is whenever I click next or previous button on entry form it doesn't work properly(DataPager).

Its either shows nothing or something wrong.

<form id="form1" runat="server">
<div>
  <h1>search for something, man!</h1>
    <p><asp:TextBox runat="server" ID="txtSearch" Text="search for something"></asp:TextBox></p>
    <p><asp:Button runat="server" ID="btnSubmit" Text="Search" OnClick="btnSubmit_Click" /></p>
<asp:ListView runat="server" ID="lv">


   <LayoutTemplate>
       <asp:PlaceHolder runat="server" ID="itemPlaceholder"></asp:PlaceHolder>
   </LayoutTemplate>



    <ItemTemplate>
          <a href="<%# ResolveClientUrl("~/entry.aspx?id=" + Eval("BlogTitle").ToString()) %>"><%# Server.HtmlEncode(Eval("BlogTitle").ToString())%></a><%#Eval("BlogContents")%></ItemTemplate>


</asp:ListView>


</div>
</form>

Webform.aspx.cs

protected void btnSubmit_Click(object sender, EventArgs e){                                                                           
       BlogDBDataContext db = new BlogDBDataContext();
       dynamic q = from b in db.Blogs
                   where b.BlogContents.Contains(txtSearch.Text.Trim()) | b.BlogTitle.Contains(txtSearch.Text.Trim())
                   select b;

       lv.DataSource = q;
       lv.DataBind();

       Session["Data"] = txtSearch.Text;
       Response.Redirect("~/entry.aspx");

   }

entry.aspx

<form id="form1" runat="server">
<div>
  <h1>search for something, man!</h1>
    <p><asp:TextBox runat="server" ID="txtSearch" Text="search for something"></asp:TextBox></p>
    <p><asp:Button runat="server" ID="sub" Text="Search" OnClick="sub_Click" /></p>

    <br />
    <br />

<asp:ListView runat="server" ID="lv">
    <LayoutTemplate>
        <asp:PlaceHolder runat="server" ID="itemPlaceHolder"></asp:PlaceHolder>
    </LayoutTemplate>
    <ItemTemplate>
         <h1><%#Eval ("BlogTitle") %></h1>
        <div>
            <%#Eval("BlogContents")%>


        </div>
    </ItemTemplate>
</asp:ListView>
</div>
    <asp:DataPager ID="lvDataPager1" runat="server" PagedControlID="lv" PageSize="1" OnPreRender="lvDataPager1_PreRender1">
    <Fields>
         <asp:NextPreviousPagerField ShowLastPageButton="false" ButtonCssClass="previousNextLink" />
        <asp:NumericPagerField ButtonType="Link" />
        <asp:NextPreviousPagerField ShowPreviousPageButton="false" ButtonCssClass="previousNextLink" />
    </Fields>
</asp:DataPager>

</form>

entry.aspx.cs

   protected void Page_Load(object sender, EventArgs e)
    {
        string strTitle = "";

        if (Session["Data"] != null)
        {
            strTitle = Session["Data"].ToString();
            BlogDBDataContext db = new BlogDBDataContext();

            dynamic q = from b in db.Blogs
                        where b.BlogContents.Contains(strTitle) | b.BlogTitle.Contains(strTitle)
                        select b;


            lv.DataSource = q;
            lv.DataBind();
        }
    }protected void lvDataPager1_PreRender1(object sender, EventArgs e)
    {
        this.lv.DataBind();
    }protected void sub_Click(object sender, EventArgs e)
    {
        BlogDBDataContext db = new BlogDBDataContext();
        dynamic q = from b in db.Blogs
                    where b.BlogContents.Contains(txtSearch.Text.Trim()) |b.BlogTitle.Contains(txtSearch.Text.Trim())
                    select b;

        lv.DataSource = q;
        lv.DataBind();
    }
halfer
  • 19,824
  • 17
  • 99
  • 186
Marcus
  • 47
  • 2
  • 12

1 Answers1

0

It looks like you have a page lifecycle problem.

Your listview is bound and rebound in multiple places so when you change the contents the page you are looking at my no longer exist.

move the binding logic so it is is only in one place

I suggest just have it in the page load, lose the submit button click method and read the search data in from the query string instead.

Ewan
  • 1,261
  • 1
  • 14
  • 25
  • Please supply me with a peace of code because i've tried it but i'm confused on how you explain it. – Marcus Mar 06 '15 at 11:04
  • just remove lvDataPager1_PreRender1 and sub_Click methods from entry.aspx.cs – Ewan Mar 06 '15 at 11:14
  • oo, this question explains it much better:http://stackoverflow.com/questions/1130439/asp-net-datapager-control-always-a-step-behind-with-paging – Ewan Mar 06 '15 at 11:17
  • Removing lvDataPage1_PreRender1 and sub_Click, when you search on the entry.aspx,it doesn't show anything at all. But i will look at the link you sent. – Marcus Mar 06 '15 at 11:44
  • The link you sent still doesn't help either. – Marcus Mar 06 '15 at 12:40
  • http://www.c-sharpcorner.com/Forums/Thread/281569/ this is the answer i was looking for. – Marcus May 26 '15 at 07:06