Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无回邮重定向_C#_Asp.net_Postback_Response.redirect - Fatal编程技术网

C# 无回邮重定向

C# 无回邮重定向,c#,asp.net,postback,response.redirect,C#,Asp.net,Postback,Response.redirect,我有一张用户登记表。在这里,我有一个链接到另一个页面(卡信息页面),必须填写注册。用户填写用户注册表单中的几个字段,然后单击指向“卡信息”页面的链接。当用户单击“卡信息”页面中的链接导航回“注册”页面时,先前在“注册”中输入的详细信息将消失。所以我需要从卡信息页面重定向到注册页面,无需回发。我怎样才能做到这一点 Response.Redirect()用于重定向。Server.Transfer()将执行到服务器端另一页的传输 更新:可以使用最初通过查询字符串传输的状态填充当前页面上下文。Items

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

Response.Redirect()用于重定向。

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
}

当您重定向到另一个页面时,它将丢失第一个页面的所有上下文,除非您采取措施停止它。脑海中浮现的选项有:

  • 在弹出窗口中创建卡信息页面。这将意味着您的主窗口在后台保持不变。您最好使用纯客户端代码来完成这项工作,但如果您需要服务器端代码来完成这项工作,这仍然是可能的,只是需要稍微灵活一点

  • 在重定向之前保存回发信息。这可以是在会话中,也可以是在数据库中,如果您愿意,您甚至可以在cookies的客户端进行。然后,当您重新访问该页面时,您可以检查是否保存了信息并自动加载


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

    跨重定向维护信息的唯一方法是使用会话变量、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属性的简单类来表示所有表单字段,然后将该类的实例存储在会话状态中,这样会更易于管理。如果你想知道我的意思,请告诉我。谢谢。。!查看答案后也执行了相同操作:)