重定向没有回发

时间:2010-07-06 10:10:47

标签: c# asp.net postback response.redirect

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

Response.Redirect()用于重定向。

6 个答案:

答案 0 :(得分:4)

如果没有回发,你不能这样做我不这么认为。我建议在会话状态下存储注册页面中的详细信息,然后如果用户返回该页面,则重新填充会话状态中的字段。

//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方法中,如果会话数据存在,则可以从会话预填充表单。 e.g

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

答案 1 :(得分:1)

当您重定向到另一个页面时,它将丢失该第一页的所有上下文,除非您采取措施阻止它。想到的选项是:

  1. 在弹出窗口中创建卡片信息页面。这意味着您的主窗口在后台保持不变。您最好使用纯客户端代码来执行此操作,但如果您需要服务器端代码来执行此操作仍然可能,只是稍微更加繁琐。

  2. 在重定向之前将信息保存在回发中。这可能只是在会话中或在数据库中,或者如果您愿意,您甚至可以在cookie中使用它。然后,当您再次访问该页面时,您可以检查是否已保存信息并自动加载。

答案 2 :(得分:1)

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

跨重定向维护信息的唯一方法是使用会话变量,Cookie,甚至将数据保存到数据库/ XML文件,并在返回到该页面时重新填充。

我建议您保存信息,因为用户会被定向到信息卡,然后返回时,检查值并重新填充。

答案 3 :(得分:0)

Server.Transfer()将执行转移到服务器端的其他页面。

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

更新2: Server.Transfer()方法有一个接受bool参数preserveForm的重载,这会保留查询字符串参数:

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

---------------- jquery ajax request -----------------------

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”

--------------------- ------------------ WebServicePathAndName.asmx

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

    Session[ "value1" ] = value1;
    Session[ "value2" ] = value2;
    Session[ "value2" ] = value3;
}

我认为,其余代码应该易于实现。