我有一个搜索文本框和一个搜索按钮,当点击时会显示一个具有以下名称和性别的网格。但是我在编辑时将页面重定向到另一个页面。现在当我从该页面回归到包含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 事件来做到这一点。
答案 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
:
答案 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调用。