回发到上一页

时间:2013-05-03 17:20:53

标签: c# asp.net vb.net

我有一个Form.aspx页面。在Post-Back上,发生复杂验证。如果发现错误:

lblErrors.Text = "There are Errors"

您可以解决页面上列出的任何错误,然后点击提交。由于Post-Back验证没有发现错误:

lblErrors.Text = ""
Response.Redirect("Confirm.aspx")

在Confirm.aspx上,可以审核提交的数据。我有一个按钮“返回编辑”

您单击按钮返回并编辑内容和内容!?... lblErrors.Text显示“有错误”。我意识到Go Back功能会启动一个Cached页面,但我希望自从我在Form Post-Back中将Text更改为“”时,它会在返回时为空。事实并非如此。

简而言之,我希望用户能够以其所有的viewstate荣耀回发上一页。我将在那时处理Page_Load中的lblErrors。

有很多字段,其中许多是webservice数据源下拉列表,其中每个选择都取决于之前的选择。那会重新运行并检查为Session变量。因此,将每个字段的值保存到变量并进行常规重定向并不是我希望的答案。我期待有关于PreviousPage的一些我没有意识到的事情。

2 个答案:

答案 0 :(得分:0)

您可以考虑使用此方法进行跨页面发布: http://msdn.microsoft.com/en-us/library/ms178139(v=vs.100).aspx

这样的事情:

if (Page.PreviousPage != null)
{
    Label lblError = 
        (Label)Page.PreviousPage.FindControl("lblError");
    if (lblError != null)
    {
        lblError.Text = "There are Errors";
    }
}

答案 1 :(得分:0)

这违背了所有逻辑,但我现在并不在意弄清楚发生了什么。

在我的Page_Load中,我这样做了:

    Try
        Dim strValidation As String = String.Empty
        Dim PostbackType As String = String.Empty

        If Session("Submit") IsNot Nothing Then
            If Session("Submit").ToString = "Submit" Then
                PostbackType = "Submit"
            Else
                PostbackType = "Back"
            End If
            Session("Submit") = Nothing
        End If

        If PostbackType = "Submit" Then
            Session("Submit") = "Back"
            Response.Redirect("Confirm.aspx")
        End If

        If IsPostBack AndAlso PostbackType <> "Back" Then
            If Request.Form("__EVENTTARGET").ToString.Contains("btnSubmit") Then
                strValidation = ValidateForm()
                If strValidation.Length > 0 Then
                    lblErrors.Text = strValidation
                Else
                    lblErrors.Text = ""
                    Session("Submit") = "Submit" 'Set so the page fully loads into the user's cache, then re-submits for the real submit
                    Dim jsLink As New HtmlGenericControl("script")
                    jsLink.InnerHtml = "javascript:__doPostBack('btnSearch','')"
                    jsLink.Attributes.Add("type", "text/javascript")
                    Me.Controls.Add(jsLink)
                End If
            End If
        End If
    Catch ex As Exception
        System.Diagnostics.Debug.WriteLine(ex.Message)
    End Try

简而言之,我让页面在验证后实际加载到缓存中,然后立即再次回发,这是真正的提交。

很长一段时间,我将重定向从条件中删除,表示表单已验证。因此,即使在验证时,页面也会完全加载(因此进入用户的缓存)。但相反,我在页面末尾添加了一个Javascript,它自动进行回发,所以用户看到的只是一个闪烁。在该回发中,我的会话变量说,kthx,继续并提交我为realz tho。从技术上讲,他们的浏览器看到的最后一页是干净的。

但是,我仍然想听听是否有真正的答案。此解决方法要求在用户的PC上启用Javascript,并创建“闪烁”。

踢球者是这样的...当用户现在“返回”时,该jsLink脚本控件仍然在页面中......虽然页面是缓存的,但它运行并进行回发。所以有了这个,后退按钮实际上在技术上会触发我的page_load(我通过跳过我的Page_Load回发内容来处理,如果这是真的)。但是知道这一点并没有帮助我清理代码。我只是出于审美原因而使用JavaScript,而不是依靠它来实现功能。