6

我正在按照这篇 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>

CrossPagePosting2.aspx

<form id="form1" runat="server">
    <h1>Page 2</h1>
    <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
</form>

CrossPagePosting2.aspx.cs

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

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

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

它使用默认的 FriendlyUrls。

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

4

5 回答 5

7

我发现Friendly URLS 可能会给你带来这个问题。默认情况下,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 页面 [例如:www.you.com/mypage] << no .aspx,则会出现错误。

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

于 2015-01-08T20:20:53.337 回答
1

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

于 2014-01-24T08:23:47.620 回答
-1

我认为以下文章会对您有所帮助。

http://csharpdotnetfreak.blogspot.com/2009/08/cross-page-posting-in-aspnet.html

有两种方法如何使用 Cross Page Posting PostBack

于 2014-01-24T06:45:25.627 回答
-1

发生这种情况的原因仅仅是因为您没有正确设置 postbackurl 属性。

如果 CrossPagePosting2.aspx 位于程序的根目录,请将 postbackurl 更改为~/CrossPagePosting1.aspx

使用 postbackurl 属性时不需要添加 <%@ PreviousPageType %> 指令。使用 PreviousPage.FindControl(id) 将搜索使用 postbackurl 属性发布的表单元素

于 2014-10-02T16:06:40.183 回答
-1

尝试这个

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack && PreviousPage != null)
        {
            Page page = PreviousPage;
            Label1.Text = ((TextBox)page.FindControl("TextBox1")).Text;
        }
    }
于 2017-04-27T09:47:59.903 回答