单击HyperLink会导致更新面板执行完整PostBack?

时间:2012-11-13 18:22:01

标签: c# asp.net updatepanel partial-postback

当我正在尝试部分回发时,

更新面板会发回完整的帖子。我只是希望能够更新Repeater,而不是在我单击超链接上一页和下一页时更新整个页面。

   protected void Page_Load(object sender, EventArgs e)
{
    PagedDataSource objpd = new PagedDataSource();

    string connStr = ConfigurationManager.ConnectionStrings["yafnet"].ConnectionString;
    SqlConnection mySQLconnection = new SqlConnection(connStr);
    if (mySQLconnection.State == ConnectionState.Closed)
    {
        mySQLconnection.Open();
    }

    SqlCommand mySqlSelect = new SqlCommand("SELECT * FROM [Comments]", mySQLconnection);
    mySqlSelect.CommandType = CommandType.Text;
    SqlDataAdapter mySqlAdapter = new SqlDataAdapter(mySqlSelect);
    DataTable table = new DataTable();
    mySqlAdapter.Fill(table);


    objpd.DataSource = table.DefaultView;
    objpd.AllowPaging = true;
    objpd.PageSize = 1;

    int currentPage;

    if (Request.QueryString["page"] != null)
    {
        currentPage = Int32.Parse(Request.QueryString["page"]);
    }
    else
    {
        currentPage = 1;
    }

    objpd.CurrentPageIndex = currentPage - 1;
    // Label1.Text = "Page " + currentPage + " of " + pds.PageCount;

    if (!objpd.IsFirstPage)
    {
        linkPrev.NavigateUrl = Request.CurrentExecutionFilePath + "?page=" + (currentPage - 1);



    }

    if (!objpd.IsLastPage)
    {
        linkNext.NavigateUrl = Request.CurrentExecutionFilePath + "?page=" + (currentPage + 1);



    }

    Repeater1.DataSource = objpd;
    Repeater1.DataBind();

}

这是我的HTML

<div class="comment">

    <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">

        <ContentTemplate>
            <asp:Repeater ID="Repeater1" runat="server">

                <HeaderTemplate>
                    <table class="commentsx" cellspacing="0">
                </HeaderTemplate>

                <ItemTemplate>

                    <tr>
                        <td class="name">
                            <div class="right">
                                <%# Eval("CommentUserName") %>
                            </div>
                            <div class="left">
                                <%# Eval("CommentDateTime") %>
                            </div>
                        </td>


                    </tr>
                    <tr>
                        <td>
                            <div class="mess">
                                <%# Eval("CommentMessage") %>
                            </div>
                        </td>
                    </tr>


                </ItemTemplate>


                <FooterTemplate>
                    </table>
                </FooterTemplate>


            </asp:Repeater>

            <asp:HyperLink ID="linkPrev" runat="server">Previous Page</asp:HyperLink>
            <asp:HyperLink ID="linkNext" runat="server">Next Page</asp:HyperLink>
        </ContentTemplate>



        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="Button1" EventName="DataBinding" />
        </Triggers>



    </asp:UpdatePanel>

</div>

2 个答案:

答案 0 :(得分:2)

Hyperlink控件根本不进行回发,它们会评估为执行GET的常规链接,而不是POST。

由于您似乎想要一些看似链接的东西,但是回发而不是GET,您需要的是LinkButton。它看起来像一个链接,但就像一个按钮,并执行回发。

答案 1 :(得分:0)

图1我会回答自己的问题,因为我在Servy的帮助下弄清楚了。超链接做了一个获取不是一个帖子,这就是为什么我上面的代码无效。所以我修改我的代码以包含以下内容。

  1. 我添加了两个按钮
  2. 为两个按钮创建事件处理程序以创建POST
  3. 这是我的代码可能会帮助某人

    public int CurrentPage
    {
        get
        {
            // look for current page in ViewState
            object o = this.ViewState["_CurrentPage"];
            if (o == null)
                return 0;   // default to showing the first page
            else
                return (int)o;
        }
    
        set
        {
            this.ViewState["_CurrentPage"] = value;
        }
    }
    private void updateMessage()
    {
        PagedDataSource objpd = new PagedDataSource();
        string connStr = ConfigurationManager.ConnectionStrings["yafnet"].ConnectionString;
        SqlConnection mySQLconnection = new SqlConnection(connStr);
        if (mySQLconnection.State == ConnectionState.Closed)
        {
            mySQLconnection.Open();
        }
    
        SqlCommand mySqlSelect = new SqlCommand("SELECT * FROM [Comments]", mySQLconnection);
        mySqlSelect.CommandType = CommandType.Text;
        SqlDataAdapter mySqlAdapter = new SqlDataAdapter(mySqlSelect);
        DataTable table = new DataTable();
        mySqlAdapter.Fill(table);
    
    
        objpd.DataSource = table.DefaultView;
        objpd.AllowPaging = true;
        objpd.PageSize = 1;
        objpd.CurrentPageIndex = CurrentPage;
        //disable pre or next buttons if necessary
        cmdPrev.Enabled = !objpd.IsFirstPage;
        cmdNext.Enabled = !objpd.IsLastPage;
    
        Repeater1.DataSource = objpd;
        Repeater1.DataBind();
    
    
    }
    
    protected void Page_Load(object sender, EventArgs e)
    {
    
    
        updateMessage();
    
    }
    
    
    
    protected void cmdPrev_Click(object sender, EventArgs e)
    {
        // Set viewstate variable to the previous page
        CurrentPage -= 1;
    
        // Reload control
        updateMessage();
    }
    protected void cmdNext_Click(object sender, EventArgs e)
    {
        // Set viewstate variable to the next page
        CurrentPage += 1;
    
        // Reload control
        updateMessage();
    
    }
    

    这是我的HTML

      <div  class="comment">
    
                         <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
    
                             <ContentTemplate>
                                 <asp:Repeater ID="Repeater1" runat="server">
    
                                     <HeaderTemplate>
                                         <table class="commentsx" cellspacing="0">
                                     </HeaderTemplate>
    
                                     <ItemTemplate>
    
                                         <tr>
                                             <td class="name">
                                                 <div class="right">
                                                     <%# Eval("CommentUserName") %>
                                                 </div>
                                                 <div class="left">
                                                     <%# Eval("CommentDateTime") %>
                                                 </div>
                                             </td>
    
    
                                         </tr>
                                         <tr>
                                             <td>
                                                 <div class="mess">
                                                     <%# Eval("CommentMessage") %>
                                                 </div>
                                             </td>
                                         </tr>
    
    
                                     </ItemTemplate>
    
    
                                     <FooterTemplate>
                                         </table>
                                     </FooterTemplate>
    
    
                                 </asp:Repeater>
    
                                  <asp:button id="cmdPrev" runat="server" text=" << " onclick="cmdPrev_Click"></asp:button>
                                  <asp:button id="cmdNext" runat="server" text=" >> " onclick="cmdNext_Click"></asp:button></td>
                             </ContentTemplate>
    
                         </asp:UpdatePanel>
    
    
                     </div>
    
相关问题