2010-07-06 88 views
1

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

Response.Redirect()用于重定向。

回答

0

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

更新:将有可能填充当前页面与最初被查询字符串传递的状态Context.Items财产。这与会话状态类似,但仅限于当前请求。

更新2:Server.Transfer()方法接受一个布尔值参数preserveForm过载,这样可以保留查询字符串参数:

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

+0

Server.Transfer不会在这方面工作,因为用户使用需要查询字符串参数的信息卡 – 2010-07-06 10:21:22

+0

没关系,稍微进一步阅读似乎表明它可以保留查询字符串(如果您需要)。 – 2010-07-06 10:48:27

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 
} 
+0

是的,我知道会议可以使用,但我想有没有其他方式!我有更多的字段(30)在用户注册页面 – 2010-07-06 10:38:41

+0

我仍然认为除了存储表单信息服务器端,无论是在会话或数据库中,还是将它们存储在Cookie中(我认为仍然需要服务器端代码)。为了使事情变得更容易,你可以创建一个简单的具有get/set属性的类来表示所有表单字段,然后将该类的一个实例存储在会话状态中,这样会更易于管理。让我知道你是否想要一个我的意思的例子。 – 2010-07-06 11:41:57

+0

谢谢..!查看答案后也是一样:) – 2010-07-06 11:56:45

1

当您重定向到另一个页面,除非你做些什么来阻止它,它就会失去第一页的所有内容。可以想到的选项有:

  1. 在弹出窗口中创建卡片信息页面。这将意味着您的主窗口在后台保持不变。你最好使用纯粹的客户端代码来做到这一点,但如果你需要服务器端代码来做到这一点,它仍然是可能的,只是稍微费力一些。

  2. 保存重定向前发送的信息。这可能只是在会话或数据库中,或者如果你愿意,你甚至可以在客户端使用cookie。然后,当您重新访问该页面时,您可以检查是否保存了信息并自动加载。

1

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

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

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

0

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

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; 
} 

我觉得,其余的代码应该很容易实现。