【问题标题】:master page button event won't fire in child page母版页按钮事件不会在子页中触发
【发布时间】:2016-01-08 05:01:06
【问题描述】:

我有一个母版页,其中包含一个带有按钮的 TextBox,当我在 TextBox 中输入内容并按 ENTER 时,按钮的 OnClick 事件触发,它将我重定向到 Results.aspx?srch=searched_term,这很好,到目前为止一切都很好,这里是编码: 这是母版页上的:

<asp:Panel runat="server" DefaultButton="Button1">
    <div class="form-group search input-group">
        <span class="input-group-addon"><span class="glyphicon glyphicon-search"></span></span>
        <asp:TextBox ID="search" placeholder="Cauta grup..." class="form-control" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" style="display:none" OnClick="btnSearch_Click" />
    </div>
</asp:Panel>

这是事件函数:

public void btnSearch_Click(object sender, EventArgs e)
{
    var searchText = Server.UrlEncode(search.Text); // URL encode in case of special characters
    Response.Redirect("~/Results.aspx?srch=" + searchText);
}

在我被重定向到 Results.aspx?srch=searched_term 并想再次搜索后,我在 TextBox 中输入并按 Enter,然后页面重新加载并使用我搜索的第一个单词进行搜索。 为什么不使用新输入的关键字进行搜索? 可能是什么问题呢?谢谢。

编辑: 这是来自Results.aspxPage_load 函数:

protected void Page_Load(object sender, EventArgs e)
{
    if(!String.IsNullOrEmpty(Request.QueryString["srch"]))
    {
        String srch = Request.QueryString["srch"];
        var myControl = (TextBox)Master.FindControl("search");
        myControl.Text = srch;

        //perform search and display results
        String connString = System.Configuration.ConfigurationManager.ConnectionStrings["GroupsConnString"].ToString();

        conn = new MySql.Data.MySqlClient.MySqlConnection(connString);

        conn.Open();
        queryStr = "";
        queryStr = "SELECT g.*,CONCAT(firstname,' ',lastname) as name FROM app_groups.groups g LEFT JOIN users u ON u.id = g.id_user WHERE group_name LIKE '%" + srch + "%' OR group_type LIKE '%" + srch + "%'";
        cmd = new MySql.Data.MySqlClient.MySqlCommand(queryStr, conn);

        reader = cmd.ExecuteReader();
        gname = "";//group name
        gtype = "";//group type
        uname = "";//user name
        id = "";
        warning = "";
        id_owner = "";

        if (reader.HasRows)
        {
            while (reader.HasRows && reader.Read())
            {
                uname = reader.GetString(reader.GetOrdinal("name"));
                gname = reader.GetString(reader.GetOrdinal("group_name"));
                gtype = reader.GetString(reader.GetOrdinal("group_type"));
                id = reader.GetString(reader.GetOrdinal("id"));
                id_owner = reader.GetString(reader.GetOrdinal("id_user"));
                warning = reader.GetString(reader.GetOrdinal("warning"));

                Panel pan = new Panel();
                pan.CssClass = "col-sm-4";
                Panel subpan = new Panel();
                subpan.CssClass = "group";

                if (Session["uid"] != null)
                {
                    int sess_id = Convert.ToInt32(Session["uid"]);

                    if ((Session["uid"] != null && Session["uadmin"].Equals("1")) || sess_id.Equals(Int32.Parse(id_owner)))
                    {
                        adminCtrls = new Panel();
                        adminCtrls.CssClass = "adminCtrls";
                        btn = new Button();//delete group button for admins and owners only
                        btn.Click += new EventHandler(deleteGroup);
                        btn.ID = "sterge";
                        btn.CssClass = "btn btn-danger btn-xs";
                        btn.Text = "Sterge grup";
                        btn.CommandArgument = id;
                        //btn.Attributes.Add("style", "float:right;");
                        adminCtrls.Controls.Add(btn);

                        if (Session["uadmin"].Equals("1"))
                        {
                            if (!warning.Equals("1"))
                            {
                                btn = new Button();//warn owner button for admins only
                                btn.Click += new EventHandler(warnOwner);
                                btn.ID = "warn";
                                btn.CssClass = "btn btn-warning btn-xs";
                                btn.Text = "Avertizeaza owner grup";
                                btn.CommandArgument = id;
                                adminCtrls.Controls.Add(btn);
                            }
                            else
                            {
                                btn = new Button();//warn owner button for admins only
                                btn.ID = "warn";
                                btn.Enabled = false;
                                btn.CssClass = "btn btn-warning btn-xs";
                                btn.Text = "A fost avertizat";
                                adminCtrls.Controls.Add(btn);
                            }
                        }
                    }
                    else
                    {
                        adminCtrls = null;
                    }
                    if (adminCtrls != null)
                    {
                        subpan.Controls.Add(adminCtrls);
                    }
                }
                subpan.Controls.Add(new LiteralControl("<span class='title text-center'>" + gname + "</span><br/>"));
                subpan.Controls.Add(new LiteralControl("<span>Owner: <span class='owner'>" + uname + "</span></span><br/>"));
                subpan.Controls.Add(new LiteralControl("<span>Categorie: <span class='type'>" + gtype + "</span></span><br/>"));
                pan.Controls.Add(subpan);
                groupsShow.Controls.Add(pan);
            }
        }

        reader.Close();
        conn.Close();
    }
}

【问题讨论】:

  • 可能你的问题是postback。检查这个问题:stackoverflow.com/questions/34544500/…
  • 你能显示那个特定页面的Page_Load吗?听起来像if(IsPostBack){} || if(!IsPostBack){}问题
  • 您应该将代码包装在 if(IsPostBack){ } else { } 您的初始代码中,您加载数据时应该突出显示它并重构为新方法
  • @southpaw93...检查我提到的那个帖子。我有 90% 的把握,只要你小心,你的问题就会得到解决。

标签: c# asp.net


【解决方案1】:

没关系,这是IsPostBack 的问题,新功能如下所示:

protected void Page_Load(object sender, EventArgs e)
        {
            if(!String.IsNullOrEmpty(Request.QueryString["srch"]))
            {
                String srch = Request.QueryString["srch"];
                if (!IsPostBack)
                {
                    var myControl = (TextBox)Master.FindControl("search");
                    myControl.Text = srch;
                }

                //perform search and display results
                String connString = System.Configuration.ConfigurationManager.ConnectionStrings["GroupsConnString"].ToString();

                conn = new MySql.Data.MySqlClient.MySqlConnection(connString);

                conn.Open();
                queryStr = "";
                queryStr = "SELECT g.*,CONCAT(firstname,' ',lastname) as name FROM app_groups.groups g LEFT JOIN users u ON u.id = g.id_user WHERE group_name LIKE '%" + srch + "%' OR group_type LIKE '%" + srch + "%'";
                cmd = new MySql.Data.MySqlClient.MySqlCommand(queryStr, conn);

                reader = cmd.ExecuteReader();
                gname = "";//group name
                gtype = "";//group type
                uname = "";//user name
                id = "";
                warning = "";
                id_owner = "";

                if (reader.HasRows)
                {
                    while (reader.HasRows && reader.Read())
                    {
                        uname = reader.GetString(reader.GetOrdinal("name"));
                        gname = reader.GetString(reader.GetOrdinal("group_name"));
                        gtype = reader.GetString(reader.GetOrdinal("group_type"));
                        id = reader.GetString(reader.GetOrdinal("id"));
                        id_owner = reader.GetString(reader.GetOrdinal("id_user"));
                        warning = reader.GetString(reader.GetOrdinal("warning"));

                        Panel pan = new Panel();
                        pan.CssClass = "col-sm-4";
                        Panel subpan = new Panel();
                        subpan.CssClass = "group";

                        if (Session["uid"] != null)
                        {
                            int sess_id = Convert.ToInt32(Session["uid"]);

                            if ((Session["uid"] != null && Session["uadmin"].Equals("1")) || sess_id.Equals(Int32.Parse(id_owner)))
                            {
                                adminCtrls = new Panel();
                                adminCtrls.CssClass = "adminCtrls";
                                btn = new Button();//delete group button for admins and owners only
                                btn.Click += new EventHandler(deleteGroup);
                                btn.ID = "sterge";
                                btn.CssClass = "btn btn-danger btn-xs";
                                btn.Text = "Sterge grup";
                                btn.CommandArgument = id;
                                //btn.Attributes.Add("style", "float:right;");
                                adminCtrls.Controls.Add(btn);

                                if (Session["uadmin"].Equals("1"))
                                {
                                    if (!warning.Equals("1"))
                                    {
                                        btn = new Button();//warn owner button for admins only
                                        btn.Click += new EventHandler(warnOwner);
                                        btn.ID = "warn";
                                        btn.CssClass = "btn btn-warning btn-xs";
                                        btn.Text = "Avertizeaza owner grup";
                                        btn.CommandArgument = id;
                                        adminCtrls.Controls.Add(btn);
                                    }
                                    else
                                    {
                                        btn = new Button();//warn owner button for admins only
                                        btn.ID = "warn";
                                        btn.Enabled = false;
                                        btn.CssClass = "btn btn-warning btn-xs";
                                        btn.Text = "A fost avertizat";
                                        adminCtrls.Controls.Add(btn);
                                    }
                                }
                            }
                            else
                            {
                                adminCtrls = null;
                            }
                            if (adminCtrls != null)
                            {
                                subpan.Controls.Add(adminCtrls);
                            }
                        }
                        subpan.Controls.Add(new LiteralControl("<span class='title text-center'>" + gname + "</span><br/>"));
                        subpan.Controls.Add(new LiteralControl("<span>Owner: <span class='owner'>" + uname + "</span></span><br/>"));
                        subpan.Controls.Add(new LiteralControl("<span>Categorie: <span class='type'>" + gtype + "</span></span><br/>"));
                        pan.Controls.Add(subpan);
                        groupsShow.Controls.Add(pan);
                    }
                }

                reader.Close();
                conn.Close();
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    相关资源
    最近更新 更多