简体   繁体   English

当我单击 LinkButton 时,它不会调用 function “LinkButton_Click”

[英]When I click on the LinkButton, it doesn't call the function “LinkButton_Click”

The LinkButton I need to do it on backend, so I unable to use the OnClientClick at frontend. LinkButton 我需要在后端完成,所以我无法在前端使用 OnClientClick。 Any idea how to solve it?知道如何解决吗?

protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        TableCell tc = new TableCell();
        if (e.Row.RowType == DataControlRowType.Header)
        {
            e.Row.Cells[0].Text = "Staff ID";
            e.Row.Cells[1].Text = "Staff Name";
            e.Row.Cells[2].Text = "Position";
            e.Row.Cells[3].Text = "Status";
            e.Row.Cells[4].Text = "Phone";
            e.Row.Cells[5].Text = "Email";

            //Add an addition column, else cant add linkbutton at the last column
            e.Row.Controls.Add(tc);
        }
        else if (e.Row.RowType == DataControlRowType.DataRow)
        {
            //add linkbutton at every last column
            e.Row.Controls.Add(tc);
            LinkButton link = new LinkButton();
            link.ID = "lbEdit";
            link.Text = "Edit";
            e.Row.Cells[6].Controls.Add(link);
            link.Click += new EventHandler(LinkButton_Click);

            if (e.Row.Cells[3].Text == "Inactive")
            {
                e.Row.Cells[3].CssClass = "redCell";
            }
        }
    }

This is the LinkButton_Click function这是 LinkButton_Click function

protected void LinkButton_Click(object sender, EventArgs e)
    {
        Response.Write("<script>alert('It works!')</script>");
        Response.Redirect("~/product.aspx");
    }

or where can I paste my "link.Click += new EventHandler(LinkButton_Click);"?或者我可以在哪里粘贴我的“link.Click += new EventHandler(LinkButton_Click);”?

This is the <asp:GridView />这是 <asp:GridView />

<asp:GridView CssClass="GridView"  ID="staffList" AutoGenerateColumns="true" runat="server" onrowdatabound="GridView_RowDataBound">

</asp:GridView>

The entire backend code整个后端代码

public partial class staff : System.Web.UI.Page
{
    string sqlConn = Convert.ToString(ConfigurationManager.AppSettings["connectionString"]);
    //LinkButton link = new LinkButton();

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

    private void BindGridView()
    {
        MySqlConnection conn = new MySqlConnection(sqlConn);
        string sql = "SELECT * from Staff";
        MySqlCommand cmd = new MySqlCommand(sql, conn);
        MySqlDataAdapter sda = new MySqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        sda.Fill(dt);
        staffList.DataSource = dt;
        staffList.DataBind();
    }

    protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        TableCell tc = new TableCell();
        LinkButton link = new LinkButton();
        if (e.Row.RowType == DataControlRowType.Header)
        {
            e.Row.Cells[0].Text = "Staff ID";
            e.Row.Cells[1].Text = "Staff Name";
            e.Row.Cells[2].Text = "Position";
            e.Row.Cells[3].Text = "Status";
            e.Row.Cells[4].Text = "Phone";
            e.Row.Cells[5].Text = "Email";

            //Add an addition column, else cant add linkbutton at the last column
            e.Row.Controls.Add(tc);
        }
        else if (e.Row.RowType == DataControlRowType.DataRow)
        {
            //add linkbutton at every last column
            e.Row.Controls.Add(tc);
            link.ID = "lbEdit";
            link.Text = "Edit";
            e.Row.Cells[6].Controls.Add(link);
            link.Click += new EventHandler(LinkButton_Click);

            //maybe can create a for loop at here to store all data
            if (e.Row.Cells[3].Text == "Inactive")
            {
                e.Row.Cells[3].CssClass = "redCell";
            }
        }
        
    }

    protected void LinkButton_Click(object sender, EventArgs e)
    {
        Response.Write("<script>alert('It works!')</script>");
        Response.Redirect("~/product.aspx");
    }
}

When you click the button, a PostBack occurs and Gridview binding will be lost and as well as the buttons links.当您单击按钮时,会发生 PostBack,并且 Gridview 绑定以及按钮链接将丢失。 The following saves the gridView.DataSource into session.下面将 gridView.DataSource 保存到 session 中。 Note the if (:IsPostPack) is removed:注意 if (:IsPostPack) 被删除:

protected void Page_Load(object sender, EventArgs e)
{
    if (Session["gvDS"] != null)
        {
            GridView1.DataSource = Session["gvDS"];
            GridView1.DataBind();
        }
        else
            BindGridView();
   
   
}

private void BindGridView()
{
    MySqlConnection conn = new MySqlConnection(sqlConn);
    string sql = "SELECT * from Staff";
    MySqlCommand cmd = new MySqlCommand(sql, conn);
    MySqlDataAdapter sda = new MySqlDataAdapter(cmd);
    DataTable dt = new DataTable();
    sda.Fill(dt);
    staffList.DataSource = dt;
    staffList.DataBind();
    
    Session["gvDS"] = GridView1.DataSource;  // save into session

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM