Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果一个页面对另一个网页执行Response.Redirect(),则asp.net控件中的新页面是否可以访问原始页面中的值?_C#_Asp.net - Fatal编程技术网

C# 如果一个页面对另一个网页执行Response.Redirect(),则asp.net控件中的新页面是否可以访问原始页面中的值?

C# 如果一个页面对另一个网页执行Response.Redirect(),则asp.net控件中的新页面是否可以访问原始页面中的值?,c#,asp.net,C#,Asp.net,我有一个文本字符串值,希望在不使用查询字符串或会话/视图状态的情况下从一个网页持续到另一个网页。我一直在尝试获取ASPhttp://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.hiddenfield.aspx“>HiddenField控件将信息从一个web表单传递到另一个表单。 我看到的所有hiddenfield控件示例都是为同一表单保留从客户端到服务器的往返过程。 窗体是否有办法从以前呈现的窗体访问ASP控件(及其值)?

我有一个文本字符串值,希望在不使用查询字符串或会话/视图状态的情况下从一个网页持续到另一个网页。我一直在尝试获取ASPhttp://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.hiddenfield.aspx“>HiddenField控件将信息从一个web表单传递到另一个表单。

我看到的所有hiddenfield控件示例都是为同一表单保留从客户端到服务器的往返过程。


窗体是否有办法从以前呈现的窗体访问ASP控件(及其值)?或者在第二个窗体执行其OnLoad方法时,初始窗体只是在内存中处理掉了吗?

我假定Response.Redirect()发送一个Location:HTTP头来执行重定向

由于HTTP是无状态的,我还假设这些变量是不可访问的

然而,有一些解决办法

  • 打印带有隐藏字段的表单,并使用javascript提交
  • 在代码内部重定向(加载需要手动获取的内容)
  • 将数据存储在某个临时数据库表中的某个位置,并传递唯一的ID

  • 然而,根据我的经验,我不明白你为什么需要这样做(除了在用户身份验证后重新提交表单之外-希望您能够使用方法2进行响应。重定向指示浏览器向服务器发出另一个请求。就服务器而言,下一个请求与任何其他传入请求都无法区分。它肯定无法连接。)无论以何种方式,他都会变成以前的样子


    您能否解释一下您对会话中存储的厌恶,以便我们提出一些可行的替代方案?

    如果两个页面位于同一个应用程序中,您可以使用服务器。传输:

    firstpage.aspx:

    protected void Page_Load(object sender, EventArgs e)
    {
        Server.Transfer("~/secondpage.aspx");
    }
    
    protected void Page_Load(object sender, EventArgs e)
    {
        Page previousPage = (Page) HttpContext.Current.PreviousHandler;
        Label previousPageControl = (Label) previousPage.FindControl("theLabel");
        label.Text =previousPageControl.Text;
    }
    
    secondpage.aspx:

    protected void Page_Load(object sender, EventArgs e)
    {
        Server.Transfer("~/secondpage.aspx");
    }
    
    protected void Page_Load(object sender, EventArgs e)
    {
        Page previousPage = (Page) HttpContext.Current.PreviousHandler;
        Label previousPageControl = (Label) previousPage.FindControl("theLabel");
        label.Text =previousPageControl.Text;
    }
    

    更好的解决方案是在第一页上实现一个接口,在该接口中,您可以公开第二页所需值的属性。

    您无法使用Response.Redirect获取上一页字段。 您可以使用:


    快速回答是否定的。正如其他人所指出的,您可以使用Server.Transfer,然后您就可以了-但是使用时要小心。这是一个“服务器端重定向”,例如

    您的用户处于联机状态,他们单击一个按钮,您执行服务器传输(“Page2.aspx”)。Page2.aspx将在他们的浏览器中呈现,但URL仍将是Page1.aspx,这可能会导致混乱和混乱的后退/前进导航


    就我个人而言,我只会使用Server.Transfer作为最后手段-在网络世界中,跨页面共享数据通常意味着您需要使用存储机制;Cookie、查询字符串、会话、数据库-您可以选择。

    使用Server.Transfer()后,您也可以通过page.PreviousPage属性引用上一页方法。使用此方法,您假定您确定自己来自哪个页面