asp.net 4.5 PreviousPage 为 null,使用母版页进行跨页发布

asp.net 4.5 PreviousPage is null with cross page posting using a master page

备注:

在目标 url 上,它返回 PreviousPage = null

这是因为 FriendlyURls 吗?

来源:

<asp:Button ID="btnSubmit" class="btn btn-primary" PostBackUrl="~/NewApplicationConfirmation.aspx" runat="server" Text="Submit" />

目标:

protected void Page_Load(object sender, EventArgs e)
    {
        if (PreviousPage != null)
        {
            if (PreviousPage.IsCrossPagePostBack == true)
            {
                var cp = PreviousPage.Master.FindControl("MainContent") as ContentPlaceHolder;
                TextBox PrevinputAppName = cp.FindControl("inputAppName") as TextBox;
                inputAppName.Text = PrevinputAppName.Text;
            }
            else if (PreviousPage.IsCrossPagePostBack == false)
            {
                inputAppName.Text = "page.previouspage.iscrosspagepostback is false";
            }
        }
        else inputAppName.Text = "page.previouspage is null";
    }

编辑:我最终使用这段代码解决了我的问题:

.aspx

<asp:Button ID="btnSubmit" class="btn btn-primary" onclick="Transfer_Click" runat="server" Text="Submit" />

代码隐藏

protected void Transfer_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                Server.Transfer("~/NewApplicationConfirmation.aspx");
            }
        }

你的问题并不是真正的 FriendlyUrls,你的问题是因为你在你的应用程序中使用路由(如果你手动定义路由而不是让 FriendlyUrls 为你连接它们,你会遇到同样的问题)。如果您将 PostbackUrl 属性 更改为您的应用程序正在为该页面使用的任何路由(可能是 ~/NewApplicationConfirmation?),则 PreviousPage 将不再为空。但是,由于 ASP.NET 验证前一页的方式,如果您为 that 页面设置了路由别名,您可能 运行 会遇到更多问题。我会说您应该使用 PreviousPage 并且不使用路由,或者路由并更改您的代码以查看 Request.Form 以获取发布到它的值。

您需要添加指令:

<%@ PreviousPageType virtualPath="~/PreviousPage.master"%>

请参阅 Microsoft 关于使用 PreviousPages 的 documentation

您也可以试试这个Microsoft article中的技巧