C# 通过asp.net中的“保存”按钮将数据绑定到gridview后,刷新页面时触发“保存”按钮单击事件

C# 通过asp.net中的“保存”按钮将数据绑定到gridview后,刷新页面时触发“保存”按钮单击事件,c#,asp.net,gridview,buttonclick,C#,Asp.net,Gridview,Buttonclick,我正在使用C#和ASP.NET开发一个web应用程序。我通过同一页面中的文本框将数据绑定到gridview,并在“保存”按钮单击事件中编写了绑定方法 现在,当我通过“save”按钮\u click事件将数据从文本框保存到gridview时,发现grid视图再次与重复行绑定,这真的很奇怪。我曾尝试在firefox、chrome和IE8上加载该页面……但结果是否定的 有谁能告诉我为什么会发生这种情况,并指导我解决它 这是我的C#代码: 受保护的无效页面加载(对象发送方、事件参数e) { 任何人都可以

我正在使用C#和ASP.NET开发一个web应用程序。我通过同一页面中的文本框将数据绑定到gridview,并在“保存”按钮单击事件中编写了绑定方法

现在,当我通过“save”
按钮\u click
事件将数据从文本框保存到gridview时,发现grid视图再次与重复行绑定,这真的很奇怪。我曾尝试在firefox、chrome和IE8上加载该页面……但结果是否定的

有谁能告诉我为什么会发生这种情况,并指导我解决它

这是我的C#代码:

受保护的无效页面加载(对象发送方、事件参数e) {


任何人都可以帮助我…提前谢谢..

这是一个常见问题。请检查类似的SO问题:

if (!IsPostBack)
{
    Bind(); //bind data to grid
}
如果只需几句话,web浏览器刷新按钮就会将最后一个请求发送到服务器,这是一个
“保存”按钮单击事件
,因此它会给出重复的行。使用这种方式,最后一个请求将只是导航到页面,因此刷新不会产生不希望的效果

已编辑

我看到您添加了一些代码。这里有一个解决方法。您正在将数据保存到数据库这一事实非常有帮助。页面加载事件的第一件事不需要检查页面是否为回发,只需调用
bindassets(“,”);
方法即可

至于保存按钮点击事件。无需调用
bindassets(“,”);
它将从页面加载中调用

protected void btnsaveasset_Click(object sender, EventArgs e)
{
        if (txtdescription.Text != "" && txtdtrecieved.Text != "" && txtcost.Text != "" && txtmodelno.Text != "" && txtquantity.Text != "")
        {
            try
            {
                string desc= txtdescription.Text;
                DateTime dtrecd = Convert.ToDateTime(txtdtrecieved.Text);
                string cost = txtcost.Text;
                string modelno = txtmodelno.Text;
                double quantity = Convert.ToDouble(txtquantity.Text);
                SqlConnection sqlcon = new SqlConnection(con);
                sqlcon.Open();
                string save = "Insert into Asset(Description,Recieveddate,cost,Modelno,Quantity)values(@desc,@date,@cost,@modelno,@quantity)";
                SqlCommand cmd = new SqlCommand(save, sqlcon);
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.Add("@desc", desc);
                cmd.Parameters.Add("@date", dtrecd);
                cmd.Parameters.Add("@cost", cost);
                cmd.Parameters.Add("@modelno", modelno);
                cmd.Parameters.Add("@quantity", quantity);
                cmd.ExecuteNonQuery();
                sqlcon.Close();
                //bindassets("", "");
                btnsaveasset.Enabled = false;
                txtdescription.Text = "";
                txtdtrecieved.Text = "";
                txtcost.Text = "";
                txtmodelno.Text = "";
                txtquantity.Text = "";
                lblErrMsg.Text = "data inserted successfully..";

            }
            catch
            {
                lblErrMsg.Text = "Please enter valid data and try again...";
            }
        }
        else
        {
            lblErrMsg.Text = "Please enter valid data and try again...";
        }
        Response.Redirect("nameofpage.aspx", false);//does a charm. browser refresh button will repeat last action and from now on that's a Response.Redirect("nameofpage.aspx", false). thus no duplicate records
}

我已经这样做了…虽然我无法解决它…这就是我感到惊讶的地方…请让我知道解决它的任何其他方法…如果你能把你的一些代码,让我们可以理解,这将是很好的
if (!IsPostBack)
{
    Bind(); //bind data to grid
}
protected void btnsaveasset_Click(object sender, EventArgs e)
{
        if (txtdescription.Text != "" && txtdtrecieved.Text != "" && txtcost.Text != "" && txtmodelno.Text != "" && txtquantity.Text != "")
        {
            try
            {
                string desc= txtdescription.Text;
                DateTime dtrecd = Convert.ToDateTime(txtdtrecieved.Text);
                string cost = txtcost.Text;
                string modelno = txtmodelno.Text;
                double quantity = Convert.ToDouble(txtquantity.Text);
                SqlConnection sqlcon = new SqlConnection(con);
                sqlcon.Open();
                string save = "Insert into Asset(Description,Recieveddate,cost,Modelno,Quantity)values(@desc,@date,@cost,@modelno,@quantity)";
                SqlCommand cmd = new SqlCommand(save, sqlcon);
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.Add("@desc", desc);
                cmd.Parameters.Add("@date", dtrecd);
                cmd.Parameters.Add("@cost", cost);
                cmd.Parameters.Add("@modelno", modelno);
                cmd.Parameters.Add("@quantity", quantity);
                cmd.ExecuteNonQuery();
                sqlcon.Close();
                //bindassets("", "");
                btnsaveasset.Enabled = false;
                txtdescription.Text = "";
                txtdtrecieved.Text = "";
                txtcost.Text = "";
                txtmodelno.Text = "";
                txtquantity.Text = "";
                lblErrMsg.Text = "data inserted successfully..";

            }
            catch
            {
                lblErrMsg.Text = "Please enter valid data and try again...";
            }
        }
        else
        {
            lblErrMsg.Text = "Please enter valid data and try again...";
        }
        Response.Redirect("nameofpage.aspx", false);//does a charm. browser refresh button will repeat last action and from now on that's a Response.Redirect("nameofpage.aspx", false). thus no duplicate records
}