在page_load asp.net上调用button_click

时间:2011-08-09 08:23:22

标签: asp.net pageload

我有一个搜索文本框和一个搜索按钮,当点击时会显示一个具有以下名称和性别的网格。但是我在编辑时将页面重定向到另一个页面。现在当我从该页面回归到包含gridview的页面时我想再次显示相同的搜索。我已经成功地检索了信息,但将其存储到会话中,但我无法调用我的btn_click事件@ page_Load。

这是一个片段:

编辑:我在代码中做了一些更改

protected void Page_Load(object sender, EventArgs e)
{
   if (Session["Redirected"] != null)
    {
        if (Session["FirstName"] != null)
            txtSearch.Text = Session["FirstName"].ToString();
        if (Session["Gender"] != null)
            ddlGen.SelectedValue = Session["Gender"].ToString();
        btnSearch_Click(sender, e);
    }

    if (!Page.IsPostBack)
    {
        BindGrid();
    }
}

这是点击事件:

protected void btnSearch_Click(object sender, EventArgs e)
{
    string query = "Select EmployeeId,FirstName,Password,Address,sex,Deptno,act_book,actTV,DOJ,isActiveYN from employees where 1=1";

    if (txtSearch.Text != "")
    {
        query += " and FirstName like '%" + txtSearch.Text + "%'";
        Session["FirstName"] = txtSearch.Text;
    }
    if (ddlGen.SelectedValue != "")
    {
        query += "  and sex='" + ddlGen.SelectedValue.ToUpper() + "'";
        Session["Gender"] = ddlGen.SelectedValue;
    }


    DataSet ds = new DataSet("Employees");
    SqlConnection con = new SqlConnection("Password=admin;User ID=admin;Initial Catalog=asptest;Data Source=dbsvr");
    SqlDataAdapter da = new SqlDataAdapter(query, con);            


    da.Fill(ds);
    gvSession.DataSource = ds;
    gvSession.DataBind();


}

现在我可以保存搜索,以便解决问题,但是另一个人已经加快了,当我在改变文本后单击按钮搜索时,它会将我带回到较旧的搜索。原因可能是因为会话是尚未清除,但我也通过处理 textchanged selectedindexchanged 事件来做到这一点。

4 个答案:

答案 0 :(得分:2)

不是试图从Page_Load调用按钮单击处理程序,而是更改按钮单击处理程序以简单地调用另一种方法,如:

protected void btnSearch_Click(object sender, EventArgs e)
{
     RunSearch();
}

然后将所有btnSearch_Click()代码移至RunSearch()

然后在Page_Load中,您可以执行以下操作:

protected void Page_Load(object sender, EventArgs e)
{
    if (Session["Gender"] != null && Session["FirstName"] != null)
    {
        txtSearch.Text = Session["FirstName"].ToString();
        ddlGen.SelectedValue = Session["Gender"].ToString();
        RunSearch();
    }

    if (!Page.IsPostBack)
    {
        BindGrid();

    }
}

另外,我建议您查看SQLCommand Parameters。您的代码很容易SQL Injection Attacks

http://en.wikipedia.org/wiki/SQL_injection

答案 1 :(得分:1)

当页面返回主页面时你可以使用QueryString参数然后在这里你可以检查查询字符串参数是否存在。在这里,您可以实现绑定网格的代码

if (Request.QueryString["Back"]!= null)
{
    // Your bind grid function
}

答案 2 :(得分:1)

您应该重置会话重定向变量,使其不会出现相同的情况。

protected void Page_Load(object sender, EventArgs e)
{
   if (Session["Redirected"] != null)
   {
        Session["Redirected"] = null;
        ....

答案 3 :(得分:0)

您可以创建一个函数,该函数将从button_click和page_load调用。