我有一个用户注册表。在这里,我链接到另一个页面(卡片信息页面),必须填写注册。用户填写用户注册表单中的几个字段,然后单击进入卡片信息页面的链接。当用户单击卡片信息页面中的链接以导航回注册页面时,注册中输入的先前详细信息将消失。所以我需要从卡片信息页面重定向到注册页面而不回发。我怎么能做到这一点?
Response.Redirect()用于重定向。
答案 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)
当您重定向到另一个页面时,它将丢失该第一页的所有上下文,除非您采取措施阻止它。想到的选项是:
在弹出窗口中创建卡片信息页面。这意味着您的主窗口在后台保持不变。您最好使用纯客户端代码来执行此操作,但如果您需要服务器端代码来执行此操作仍然可能,只是稍微更加繁琐。
在重定向之前将信息保存在回发中。这可能只是在会话中或在数据库中,或者如果您愿意,您甚至可以在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-ups
或panels
(使用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;
}
我认为,其余代码应该易于实现。