我有一个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的一些我没有意识到的事情。
答案 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,而不是依靠它来实现功能。