asp.net 4.5 PreviousPage 为 null,使用母版页进行跨页发布
asp.net 4.5 PreviousPage is null with cross page posting using a master page
备注:
- 我正在使用 asp.net 4.5
- 我正在使用母版页
- 默认安装 FriendlyURLs
- 我正在尝试使用 POST 方法
跨页 post
在目标 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中的技巧
备注:
- 我正在使用 asp.net 4.5
- 我正在使用母版页
- 默认安装 FriendlyURLs
- 我正在尝试使用 POST 方法 跨页 post
在目标 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中的技巧