代码之家  ›  专栏  ›  技术社区  ›  Gopi

无回发重定向

  •  1
  • Gopi  · 技术社区  · 16 年前

    我有用户登记表。这里我有另一个页面(卡信息页面)的链接,必须填写注册。用户填写用户登记表中的几个字段,然后单击进入卡信息页面的链接。当用户点击卡片信息页面中的链接导航回注册页面时,先前在注册中输入的详细信息将消失。所以我需要从卡片信息页面重定向到注册页面而不需要回发。我怎样才能做到?

    response.redirect()用于重定向。

    6 回复  |  直到 13 年前
        1
  •  4
  •   Matthew Dresser    16 年前

    我不认为没有后援你不可能做到这一点。我建议将注册页中的详细信息存储在session state中,然后如果用户返回到该页,则重新填充session state中的字段。

    //eg in registration page
    protected void CardInfoLink_Click(object sender, EventArgs e)
    {
        //store details entered
        Session["Registered"] = true;
        Session["Username"] = txtUserName.Text; 
        //etc for any other fields
        Response.Redirect("~/CardDetailsPage.aspx");
    }
    

    然后,在page_load方法中,如果会话数据存在,可以从会话预填充表单。例如

    if (!Page.IsPostback && (bool)Session["Registered"])
    {
        txtUserName.Text = (string)Session["Username"];
        //repopulate other fields as necessary
    }
    
        2
  •  1
  •   Chris    16 年前

    当你重定向到另一个页面时,它将丢失第一个页面的所有上下文,除非你做些什么来阻止它。想到的选项是:

    1. 在弹出窗口中创建卡信息页。这意味着你的主窗口在背景中没有变化。您最好使用纯客户端代码来实现这一点,但如果您需要服务器端代码来实现这一点,那仍然是可能的,只是稍微有点麻烦。

    2. 重定向前保存回发信息。这可能只是在会话中或在数据库中,或者您甚至可以在cookies的clientside中执行。然后,当您重新访问页面时,您可以检查是否已保存信息并自动加载它。

        3
  •  1
  •   stoic Kobus Kleynhans    16 年前

    如果将用户重定向到另一个页面,则该屏幕上的所有捕获信息都将丢失。视图状态不保留在重定向上,而只保留在回发/回调上

    跨重定向维护信息的唯一方法是使用会话变量、cookies,甚至将数据持久化到数据库/xml文件中,并在返回该页时重新填充。

    我建议您在用户被指向信息卡时保存您的信息,然后在返回时,检查值并重新填充它。

        4
  •  0
  •   SelvaS    16 年前

    可以将值存储在 ViewState/Session 并重定向到另一页(卡信息页),然后在返回到注册页时重新填充值。或显示 pop-ups 或 panels (显示/隐藏使用 Visible 属性)在同一页中可以保留用户输入。(如果使用服务器端控件,则不会清除这些值)。

        5
  •  0
  •   Adam Houldsworth    16 年前

    Server.Transfer() 将执行到服务器端另一页的传输。

    更新: 可以填充当前页面 Context.Items 属性,其状态最初由查询字符串传输。其行为类似于会话状态,但仅限于当前请求。

    更新2: 这个 服务器.传输() 方法具有接受bool参数的重载。 preserveForm ,这将保留查询字符串参数:

    http://msdn.microsoft.com/en-us/library/aa332847(v=VS.71).aspx

        6
  •  0
  •   Michael Celey Luís Ledebour    13 年前

    您可以在“转到下一页”按钮上使用任何类型的ajax请求单击以将注册数据复制到会话中。然后在返回之后,您可以再次填充数据并删除会话。您的代码应该与此类似:

    ---------jquery ajax请求-

    function SetValuesIntoSession(value1, value2, value3) {        
            $.ajax(
            {
                type: "POST",
                url: WebServicePathAndName.asmx/InsertIntoSessionMethodName",
                contentType: "application/json; charset=utf-8",
                data: "{value1:'" + value1 + "', value2:'" + value2 + "', value3:'" + value3 + "'}",
                dataType: "json",
                success: function(response) {
                    if (response.d == "Yes") {
                        //do something in correct response
                    }
                    if (response.d == "No") {
                        //do something for incorrect response
                    }
                },
                error: function(xhr) {
                    alert('Error!  Status = ' + xhr.status);
                }
            });       
    }
    

    下面是web服务的代码,它应该将数据插入到会话中。注意,如果要在web服务中使用会话状态,必须设置“enablesession=true”

    ———————————————————————————————————————————————————————————————————--

    [WebMethod( EnableSession = true )] 
    public void InsertIntoSessionMethodName( string value1, string value2, string value3 )
    {
    
        Session[ "value1" ] = value1;
        Session[ "value2" ] = value2;
        Session[ "value2" ] = value3;
    }
    

    我认为,剩下的代码应该很容易实现。

    推荐文章