【问题标题】:How can I server.transfer to one page and then server.transfer back to the original我怎样才能 server.transfer 到一页,然后 server.transfer 回到原来的
【发布时间】:2015-03-25 15:42:04
【问题描述】:

如何使用以下方法转移到确认页面:

    protected void Transfer_Click(object sender, EventArgs e)
    {
        if (Page.IsValid)
        {
            Server.Transfer("~/NewApplicationConfirmation.aspx");
        }
    }

然后,如果用户单击编辑,则在新页面(NewApplicationConfirmation.aspx)上转回原始页面:

    protected void Edit_Click(object sender, EventArgs e)
    {
        if (Page.IsValid)
        {
            Server.Transfer("~/NewApplication.aspx");
        }
    }

当我现在单击编辑时,它只是将 NewApplicationConfirmation.aspx 中的所有数据都清空,并且不会变回 NewApplication.aspx

注意事项:

--当我进行第一次服务器传输时,顶部的地址不会从 /NewApplication 更改,并且当我单击编辑时,顶部的地址会更改为 /NewApplicationConfirmation

--我使用的是 ASP.net 4.5 c#

--FriendlyURLs 已安装(默认)

--我在两个页面上都使用母版页

编辑附加信息:

当我进行第一次传输时,我使用

var cp = PreviousPage.Master.FindControl("MainContent") as ContentPlaceHolder; 
TextBox PrevinputAppName = cp.FindControl("inputAppName") as TextBox;
inputAppName.Text = PrevinputAppName.Text; 

找到控件。如何将这些转移回原始页面?另请注意,当我执行第二个 server.transfer 时,确认页面显示为空白 - newapplication.aspx 页面未出现在浏览器中

【问题讨论】:

  • 关于地址栏中的url不改变,它不会。这就是转移的作用。服务器在内部将执行转移到另一个页面而不告诉客户端。如果您想让客户端转到不同的页面,您需要Response.Redirect("newpage.aspx");
  • 我明白了,但是可以server.transfer回原来的页面吗?
  • 是的。这正是你正在做的。并且由于(我假设)您没有传递任何参数,因此当您传输回原始页面时,您正在创建它的一个新实例,其中没有您的数据
  • 请使用该附加信息更新您的原始问题。这将使事情更容易阅读
  • 我的建议是您使用重定向而不是传输,并且您要熟悉 GET 与 POST,以及 QueryString vars 与 Session vars

标签: c# asp.net server.transfer


【解决方案1】:

当您移动到重定向页面时,您可以在会话值中使用页面名称,将当前页面名称放入会话中,当您单击返回时,可以使用会话值来重定向上一页。完成工作后,将会话设为 null。

protected void Transfer_Click(object sender, EventArgs e)
    {
        if (Page.IsValid)
        {
            Server.Transfer("~/NewApplicationConfirmation.aspx?page=NewApplication");
        }
    }
    protected void Edit_Click(object sender, EventArgs e)
    {
        if (Page.IsValid)
        {
            Server.Transfer(Request.QueryString["page"] + ".aspx");
        }
    }

如果你想使用会话变量,请使用它,我在下面提到:

protected void Transfer_Click(object sender, EventArgs e)
{
    if (Page.IsValid)
    {
        Session["page"]="NewApplication.aspx";
        Server.Transfer("~/NewApplicationConfirmation.aspx");
    }
}
protected void Edit_Click(object sender, EventArgs e)
{
    if (Page.IsValid)
    {
        Server.Transfer(Session["page"].ToString());
    }
}

【讨论】:

  • 看看msdn.microsoft.com/en-us/library/6c3yckfw%28v=vs.140%29.aspx,他用的是另一种方法。
  • 是的,您可以使用查询字符串,但您是说不要修改您的网址
  • 只需在查询字符串中传递您的值,如 ~/NewApplicationConfirmation.aspx?page=NewApplication 并使用它返回,如 Server.Transfer(Request.QueryString["page"]+".aspx");
  • 我有 50 个变量通过。如果我使用查询字符串,我担心会达到最大字符数。
  • 别担心。你可以通过这个。或者您也可以使用会话变量。让我也用会话更新我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-29
相关资源
最近更新 更多