C# 无回邮重定向
我有一张用户登记表。在这里,我有一个链接到另一个页面(卡信息页面),必须填写注册。用户填写用户注册表单中的几个字段,然后单击指向“卡信息”页面的链接。当用户单击“卡信息”页面中的链接导航回“注册”页面时,先前在“注册”中输入的详细信息将消失。所以我需要从卡信息页面重定向到注册页面,无需回发。我怎样才能做到这一点 Response.Redirect()用于重定向。C# 无回邮重定向,c#,asp.net,postback,response.redirect,C#,Asp.net,Postback,Response.redirect,我有一张用户登记表。在这里,我有一个链接到另一个页面(卡信息页面),必须填写注册。用户填写用户注册表单中的几个字段,然后单击指向“卡信息”页面的链接。当用户单击“卡信息”页面中的链接导航回“注册”页面时,先前在“注册”中输入的详细信息将消失。所以我需要从卡信息页面重定向到注册页面,无需回发。我怎样才能做到这一点 Response.Redirect()用于重定向。Server.Transfer()将执行到服务器端另一页的传输 更新:可以使用最初通过查询字符串传输的状态填充当前页面上下文。Items
Server.Transfer()
将执行到服务器端另一页的传输
更新:可以使用最初通过查询字符串传输的状态填充当前页面上下文。Items
属性。其行为类似于会话状态,但仅限于当前请求
更新2:服务器.Transfer()方法有一个重载,该重载接受bool参数preserveForm
,这将保留查询字符串参数:
我不认为没有回帖你就无法做到这一点。我建议将注册页面中的详细信息存储在会话状态中,然后如果用户返回到该页面,则从会话状态重新填充字段
//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
}
当您重定向到另一个页面时,它将丢失第一个页面的所有上下文,除非您采取措施停止它。脑海中浮现的选项有:
如果将用户重定向到另一个页面,则该屏幕上捕获的所有信息都将丢失。视图状态不保留在重定向上,而仅保留在回发/回调上 跨重定向维护信息的唯一方法是使用会话变量、cookie,甚至将数据持久化到数据库/XML文件,并在返回到该页面时重新填充
我建议您在用户被定向到信息卡时保存您的信息,然后在返回时检查值并重新填充。您可以将值存储在
视图状态/会话中,并重定向到另一页(卡信息页),然后在返回注册页时重新填充值。或者在同一页面中显示弹出窗口
或面板
(使用可见
属性显示/隐藏),您可以保留用户输入。(如果使用服务器端控件,则不会清除值)。您可以在“转到下一页”按钮上使用任何类型的ajax请求,单击以将注册数据复制到会话中。然后在返回后,您可以再次填充数据并删除会话。您的代码应该与此代码类似:
----------------jqueryajax请求-----------------------
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------------------
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);
}
});
}
我认为,代码的其余部分应该很容易实现。Server.Transfer在这方面不起作用,因为用户使用的信息卡需要查询字符串参数。不过,进一步阅读似乎表明,如果您愿意,它可以保留查询字符串。是的,我知道可以使用会话,但我在想还有别的办法吗!我在用户注册页面中有更多的字段(30个),我仍然认为除了存储表单信息服务器端之外,没有其他方法,无论是在会话或数据库中,还是存储在cookie中(我认为仍然需要服务器端代码)。为了使事情变得更简单,您可以创建一个具有get/set属性的简单类来表示所有表单字段,然后将该类的实例存储在会话状态中,这样会更易于管理。如果你想知道我的意思,请告诉我。谢谢。。!查看答案后也执行了相同操作:)