我有一个用户注册表单。在这里,我已链接到另一个页面(卡片信息页面),该页面必须填写以进行注册。用户填写用户注册表单中的少数几个字段,然后单击用于注册信息页面的链接。当用户点击卡片信息页面中的链接导航回注册页面时,注册时输入的以前的详细信息就消失了。所以我需要从卡信息页面重定向到注册页面而无需回传。我怎么能做到这一点?重定向无回发
Response.Redirect()用于重定向。
我有一个用户注册表单。在这里,我已链接到另一个页面(卡片信息页面),该页面必须填写以进行注册。用户填写用户注册表单中的少数几个字段,然后单击用于注册信息页面的链接。当用户点击卡片信息页面中的链接导航回注册页面时,注册时输入的以前的详细信息就消失了。所以我需要从卡信息页面重定向到注册页面而无需回传。我怎么能做到这一点?重定向无回发
Response.Redirect()用于重定向。
Server.Transfer()
将执行到服务器端的另一个页面的传输。
更新:将有可能填充当前页面与最初被查询字符串传递的状态Context.Items
财产。这与会话状态类似,但仅限于当前请求。
更新2:的Server.Transfer()
方法接受一个布尔值参数preserveForm
过载,这样可以保留查询字符串参数:
http://msdn.microsoft.com/en-us/library/aa332847(v=VS.71).aspx
你不能没有回传我不这样做认为。我建议将会话状态中注册页面的详细信息存储起来,如果用户返回该页面,请从会话状态重新填充字段。
//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
}
是的,我知道会议可以使用,但我想有没有其他方式!我有更多的字段(30)在用户注册页面 – 2010-07-06 10:38:41
我仍然认为除了存储表单信息服务器端,无论是在会话或数据库中,还是将它们存储在Cookie中(我认为仍然需要服务器端代码)。为了使事情变得更容易,你可以创建一个简单的具有get/set属性的类来表示所有表单字段,然后将该类的一个实例存储在会话状态中,这样会更易于管理。让我知道你是否想要一个我的意思的例子。 – 2010-07-06 11:41:57
谢谢..!查看答案后也是一样:) – 2010-07-06 11:56:45
当您重定向到另一个页面,除非你做些什么来阻止它,它就会失去第一页的所有内容。可以想到的选项有:
在弹出窗口中创建卡片信息页面。这将意味着您的主窗口在后台保持不变。你最好使用纯粹的客户端代码来做到这一点,但如果你需要服务器端代码来做到这一点,它仍然是可能的,只是稍微费力一些。
保存重定向前发送的信息。这可能只是在会话或数据库中,或者如果你愿意,你甚至可以在客户端使用cookie。然后,当您重新访问该页面时,您可以检查是否保存了信息并自动加载。
如果您将用户重定向到另一个页面,该屏幕上的所有捕获信息将会丢失。视图状态不保留在重定向上,但仅保留在重定向上,但仅限于回发/回调
跨重定向维护信息的唯一方法是使用会话变量,Cookie,甚至将数据保存到数据库/ XML文件并在返回到该页面时重新填充。
我建议你保存你的信息,因为用户被定向到信息卡,然后在返回时检查值并重新填充它。
您可以将值存储在ViewState/Session
并重定向到另一个页面(卡信息页面),然后在返回到注册页面时重新填充值。或者在同一页面上显示pop-ups
或panels
(使用Visible
属性显示/隐藏),您可以保留用户输入。 (如果您使用的是服务器端控件,则值不会被清除)。
您可以使用任何种类的“转到下一页”按钮点击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;
}
我觉得,其余的代码应该很容易实现。
Server.Transfer不会在这方面工作,因为用户使用需要查询字符串参数的信息卡 – 2010-07-06 10:21:22
没关系,稍微进一步阅读似乎表明它可以保留查询字符串(如果您需要)。 – 2010-07-06 10:48:27