首页 > 解决方案 > 如何在网络表单中动态创建分页按钮?

问题描述

我使用asp.net web application framework 3.5(用于学校学习的版本)。当我想创建分页时(不在数据网格中使用 javascript 或 pagersetting)。我对这种情况有想法:
- 计数行数将被选中 => 计算页数
- 使用 OFFSET 和 ROWS FETCH NEXT 准确获取每个页面的数据
- 生成列表链接按钮用于分页使用页数
但是当我在外面创建按钮时Page_Load(),此按钮无法调用OnClick事件(我尝试了多种方法动态创建按钮但也不起作用)。我认为当我单击这些按钮时,首先运行Page_Load(),并且这些按钮的数据不会回传服务器
但我无法在Page_Load()内部创建因为我需要知道单击按钮的位置(更改分页)。我该如何解决这种情况,而不仅仅是分页,我想知道为什么在Page_Load()外部动态创建按钮、链接按钮、..不起作用。
有代码演示:
WebForm1.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="OrderController.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div id="DivContainer" runat="server">
            <asp:TextBox ID="TextBoxField" runat="server" Text="NOT CLICK"></asp:TextBox>
            <div id="ButtonContainer" runat="server">
                <asp:LinkButton ID="FixedButton" Text="Fixed Button" OnClick="Button_Click" runat="server"></asp:LinkButton>
            </div>
            </div>
    </form>
</body>
</html>

*WebForm1.aspx.cs

using System;
using System.Web.UI.WebControls;

namespace OrderController
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack) //put genarate funciton here like genarate function will call in runtime, not call again when click in button 
            {
                genarateDynamicButton();
            }
        }
        private void genarateDynamicButton()
        {
            LinkButton lnk = new LinkButton();
            lnk.ID = "DynamicButton";
            lnk.Text = "Dynamic Button";
            lnk.EnableViewState = true;
            lnk.Attributes.Add("AutoPostBack", "true");
            lnk.Click += new EventHandler(Button_Click);
            ButtonContainer.Controls.Add(lnk);
        }

        protected void Button_Click(object sender, EventArgs e)
        {
            TextBoxField.Text = "Clicked";
        }
    }
}

这是代码将创建按钮,但在这种情况下不能使用

using System;
using System.Web.UI.WebControls;

namespace OrderController
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            genarateDynamicButton();
        }
        private void genarateDynamicButton()
        {
            LinkButton lnk = new LinkButton();
            lnk.ID = "DynamicButton";
            lnk.Text = "Dynamic Button";
            lnk.EnableViewState = true;
            lnk.Attributes.Add("AutoPostBack", "true");
            lnk.Click += new EventHandler(Button_Click);
            ButtonContainer.Controls.Add(lnk);
        }

        protected void Button_Click(object sender, EventArgs e)
        {
            TextBoxField.Text = "Clicked";
        }
    }
}

标签: c#asp.net

解决方案


推荐阅读