回发到上一页

本文关键字:一页 | 更新日期: 2023-09-27 18:12:06

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

lblErrors.Text = "There are Errors"

您解决了页面上列出的任何错误并点击提交。Post-Back验证没有发现错误:

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

确认。Aspx,提交的数据可以被审查。我有一个按钮"返回编辑"

你点击按钮回去编辑一些东西和什么!?…lblErrors。文本显示"有错误"。我意识到Go Back功能会弹出一个缓存页面,但我希望由于我在表单Post-Back期间将Text更改为",因此返回时它将是空的。这不是.

简而言之,我希望用户能够回发前一个页面及其所有视图状态的荣耀。我将在那时处理Page_Load中的lblErrors。

有很多字段,其中许多是webservice数据源下拉菜单,其中每个选择都依赖于前一个选择。如果作为会话变量重新运行和检查,那就太糟糕了。因此,将每个字段的值保存到变量并进行常规重定向并不是我所希望的答案。

回发到上一页

您可以考虑使用这种方法进行跨页发布: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";
    }
}

这违背了所有的逻辑,但我目前并不关心发生了什么。

在我的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,继续提交给我。所以从技术上讲,他们的浏览器看到的最后一个页面是干净的。

不过,我还是想听听是否有一个真正的答案。这个解决方案需要在用户的PC上启用Javascript,并且还会创建"blink"。

关键是…当用户现在"返回"时,jsLink脚本控件仍然在页面中…虽然页面是缓存的,但它运行并进行回发。所以有了这个,后退按钮实际上在技术上触发我的page_load(我通过跳过我的page_load回发的东西,如果这是真的)。但是知道这些并不能帮助我清理代码。我希望只出于美观的原因使用JavaScript,而不依赖于它的功能。