【问题标题】:Navigate Page to Page - Redirection issue导航页面到页面 - 重定向问题
【发布时间】:2018-01-18 09:24:36
【问题描述】:

我尝试制作一个从数据库中检索 xml 数据的 Web 应用程序。 数据库将第一页 Gridview 与复选框绑定: First page

这个页面的网址是http://localhost:65224/WebForm1.aspx

“验证”按钮重定向的第二页是第一页中所选项目的结果,其中包含您所选内容的更多详细信息: Page Results

我不知道为什么,但是URL和最后一个一样:http://localhost:65224/WebForm1.aspx

最后一个“验证”按钮是确认您要更新的内容,我想打开一个新页面以确认用户从复选框(摘要)中选择了什么,但第三页完全是空的。 而且,第三页的 URL 最后是正确的:http://localhost:65224/WebForm3.aspx

第二页后面有代码,这就是为什么我有结果,但我不知道为什么 URL 不正确。

这是 WebForm2 的“OnClick”按钮后面的代码:

protected void btn_final_validation_Click(object sender, EventArgs e)
    {
        Response.Redirect("WebForm3.aspx");
        foreach (GridViewRow row in gvResult.Rows)
        {

            CheckBox cb = (CheckBox)row.FindControl("FinalChk");
            CheckBox cb2 = (CheckBox)row.FindControl("FinalChkForm");

            if ((cb != null && cb.Checked) || (cb2 != null && cb2.Checked))
            {
                Server.Transfer("~/WebForm3.aspx");
                //cb2.Visible = false;
                //Response.Redirect("WebForm3.aspx");
            }
            else
            {
                //ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('Veuillez sélectionner au moins un item')", true);
                Page.ClientScript.RegisterStartupScript(this.GetType(), "Scripts", "<script>alert('Vous devez sélectionnere au moins 1 item.');</script>");
            }
        }

        foreach (GridViewRow row in gvResultForm.Rows)
        {
            CheckBox cb = (CheckBox)row.FindControl("FinalChkForm2");
            if (cb != null && cb.Checked)
            {
                Server.Transfer("~/WebForm3.aspx");
            }
        }

        foreach (GridViewRow row in gvResultFormSelected.Rows)
        {
            CheckBox cb = (CheckBox)row.FindControl("FinalChk2");
            if (cb != null && cb.Checked)
            {
                Server.Transfer("~/WebForm3.aspx");
            }
        }
    }

这是 WebForm3 的 Page_Load 代码:

protected void Page_Load(object sender, EventArgs e)
    {
        List<string> test_recup = new List<string>();
        if (this.Page.PreviousPage != null)
        {
            GridView GridView1 = (GridView)this.Page.PreviousPage.FindControl("gvResult");

            foreach (GridViewRow row in GridView1.Rows)
            {
                if (row.RowType == DataControlRowType.DataRow)
                {
                    CheckBox chkRow = (row.Cells[0].FindControl("FinalChk") as CheckBox);
                    CheckBox chkRow2 = (row.Cells[2].FindControl("FinalChkForm") as CheckBox);
                    if (chkRow.Checked)
                    {
                        string name = row.Cells[1].Text;
                        test_recup.Add(name);
                        System.Diagnostics.Debug.WriteLine("Template selected : " + name);
                    }
                }
            }
        }

        DataTable dt = new DataTable();
        dt.Columns.Add("recup_template", typeof(string));

        foreach (string s in test_recup)
        {
            dt.Rows.Add(s);
            System.Diagnostics.Debug.WriteLine("test : " + s);
        }

        GridView1.DataSource = dt;
        GridView1.DataBind();
    }

【问题讨论】:

    标签: c# asp.net navigation


    【解决方案1】:

    Server.Transfer 在服务器上重定向。即客户端上的 URL 不反映服务器返回的实际页面。如果您希望客户端知道发生了重定向,请将其更改为 Response.Redirect

    【讨论】:

    • 是否可以使用“Response.Redirect”传输“CheckBox.Checked”信息? @CodeNinja 编辑:我将“Server.Transfer”更改为“Response.Redirect”,第二页结果为空……但 URL 正确(WebForm2)。
    • 您可以在重定向时使用查询字符串将其作为参数传递。我相信空白页面是由于检查 - this.Page.PreviousPage.
    • 嗯,有没有好的 URL 对我来说并不重要。我想从我的第 2 页的选定数据中转移和绑定我的第 3 页的 griview。它从 1 到 2 工作,但不是从 2 到 3,使用相同的代码......它是“跨页发布吗?” link。我在不同的导航技术上找到了该页面,但我有同样的问题。 @CodeNinja
    • 我设法更改了第二页的 URL。我删除了 OnClick 方法并在 Page_Load 上添加了Page.PreviousPage.IsCrossPagePostBack。然后,我在我的 aspx 页面上添加了这个:&lt;%@ PreviousPageType VirtualPath="~/WebForm1.aspx" %&gt;。不幸的是,此更改不适用于页面,当我单击按钮时,我只有第二页,其中没有数据。
    • CrossPagePostBack 用于不同的目的。当使用 ASP.Net Web 表单将来自一个页面的数据发布到另一个页面时使用它。如果您只想根据来自上一页的请求将数据绑定到网格,我建议您在将请求传输到第二页时向请求添加查询字符串。你可以在这个link中找到更多关于CrossPagePostBack的信息
    猜你喜欢
    • 2012-06-22
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 2013-04-17
    • 2020-09-08
    • 1970-01-01
    相关资源
    最近更新 更多