为什么Page.PreviousPage始终为null?

bra*_*olt 4 asp.net webforms cross-page-posting

我正在通过这篇MSDN文章试验跨页面发布.我有这个代码:

CrossPagePosting1.aspx

<form id="form1" runat="server">
    <h1>Page 1</h1>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
    <asp:Button ID="Button1" runat="server" Text="Button" PostBackUrl="CrossPagePosting2.aspx"/>
</form>
Run Code Online (Sandbox Code Playgroud)

CrossPagePosting2.aspx

<form id="form1" runat="server">
    <h1>Page 2</h1>
    <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
</form>
Run Code Online (Sandbox Code Playgroud)

CrossPagePosting2.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
    TextBox TextBox1 = (TextBox)Page.PreviousPage.FindControl("TextBox1");
    Label1.Text = TextBox1.Text;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码产生了一个NullReferenceExceptionat Page.PreviousPage.为什么?

这是一个ASP.Net 4.0应用程序.

它使用FriendlyUrls,这是默认值.

注意:我不希望上一页是强类型的,例如使用PreviousPageType指令.根据引用的文章,这不应该是必要的.

小智 6

我发现友情URL可能会让你遇到这个问题.默认情况下,Web窗体模板包含ASP.NET友好URL.

使用Visual Studio中的默认WebForm时,AutoRedirectMode设置为Permanent.这使您请求进入"GET",并且由于您使用的是友好URL,因此无法评估PreviousPage.

解决方法:

  • 如果你想要一个"POST"动作然后设置AutoRedirectMode = RedirectMode.Off(这将给你PreviousPage信息,但只能从非友好的Url页面[例如:www.you.com/mypage.aspx],但是这将得到如果您尝试访问Friendly-Url页面[ex:www.you.com/mypage] << no .aspx),则会出现错误.

  • 如果您需要PreviousPage信息,则必须在您的网页中设置上一个post指令<%@ PreviousPageType VirtualPath ="〜/ Page1.aspx"%>或者可以在OnClick方法中使用Server.Transfer.


bra*_*olt 1

这里的问题是由FriendlyUrls引起的,它默认安装在我正在工作的测试站点上。我禁用了FriendlyUrls,它起作用了。