Нажмите кнопку_нажмите на страницу_загрузки asp.net - PullRequest
2 голосов
/ 09 августа 2011

У меня есть текстовое поле поиска и кнопка поиска, при нажатии на которую отображается сетка со следующими именами и полом. Однако я перенаправил страницу на другую страницу при редактировании. Теперь, когда я возвращаюсь с этой страницы на страницу, содержащую вид сетки Я хочу снова отобразить тот же поиск. Я успешно поместил извлеченную информацию, но сохранил ее в сеансе, но я не могу вызвать мое событие 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();


}

Теперь я могу сохранить поиск, чтобы эта проблема была решена, но всплыла другая проблема: когда я нажимаю кнопку поиска после изменения текста, он возвращает меня к старому поиску. Причина, вероятно, в том, что сеансы не очищен, но я также сделал это, обработав текстовое сообщение и selectedindexbound eventd.

Ответы [ 4 ]

2 голосов
/ 09 августа 2011

Вместо того, чтобы пытаться вызвать ваш обработчик нажатия кнопки из 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 голос
/ 09 августа 2011

Вы должны сбросить переменную перенаправления сеанса, чтобы она не падала в том же случае.

protected void Page_Load(object sender, EventArgs e)
{
   if (Session["Redirected"] != null)
   {
        Session["Redirected"] = null;
        ....
1 голос
/ 09 августа 2011

Вы можете использовать пареметр QueryString, когда страница вернется на главную страницу, тогда здесь вы можете проверить, есть ли пареметр QueryString. здесь вы можете реализовать код для привязки сетки

if (Request.QueryString["Back"]!= null)
{
    // Your bind grid function
}
0 голосов
/ 09 августа 2011

Вы можете создать функцию, которая будет вызываться как из button_click, так и из page_load.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...