如何在带有母版页的页面中使用PostbackUrl

时间:2012-09-25 08:48:10

标签: asp.net

任何人都可以给我一个PostbackUrl的工作示例,其中目标页面和上一页都有母版页。

例如,假设我有两个页面 default1.axpx default2.aspx 。它们都有一个母版页 MyMasterpage.masterpage

我想从 default1.aspx 回发到 default2.aspx ,然后从default2页面的default1页面控件中提取数据。

我该怎么做?

2 个答案:

答案 0 :(得分:7)

您应该将此问题标题为“如何在ContentPlaceholder中找到控件?”,因为问题不在于PreviousPage不起作用,而是您不明白ContentPlaceholder的工作。

此问题与母版页本身无关,与使用ContentPlaceholder完全相关,FindControls是asp.net用语中的命名容器。 PreviousPage不会在命名容器内搜索,这正是它们的设计方式。

HtmlForm form = PreviousPage.Form; // this works fine Control ctrl = PreviousPage.Master.FindControl("TextBox1"); // this works as well 适用于母版页,因此我对他们与您的问题有什么关系感到困惑。您可以访问上一页中您想要的任何属性,它实际上可以工作。例如:

FindControl()

您可能遇到的问题是您尝试使用FindControl在内容页面中查找特定控件,并且它无法正常工作,正是因为您在PreviousPage上调用了FindControl,而不是在您要查找的控件的命名容器中。

要查找所需的控件,只需在命名容器上执行var ph = PreviousPage.Controls[0].FindControl("ContentPlaceHolder1"); var ctl = ph.FindControl("TextBox1"); 即可。假设占位符名为ContentPlaceHolder1。

,以下代码可以正常工作
PreviousPage

您可以使用以下代码验证此问题与Page_Load无关,该代码仅使用单个页面并查找自身的控件。在Default.aspx页面上放置一个名为TextBox1的文本框。然后,在Default.aspx.cs后面的代码的protected void Page_Load(object sender, EventArgs e) { // Following code should find the control, right? Wrong. It's null var ctrl = Page.FindControl("TextBox1"); // assuming your content placeholder in the masterpage is called MainContent, this works. var ctrl = Page.Controls[0].FindControl("MainContent").FindControl("TextBox1"); } 函数中放入此代码,然后在调试器中运行它并逐步执行它。

PreviousPage

所以请不要说“如果页面有母版页,{{1}}不能正常工作”,因为它的工作正常。问题是你不知道它应该如何工作。了解页面对象模型的工作原理。

答案 1 :(得分:0)

你试试这个

这是第一页

<%@ Page Language="C#" %>  

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  

<script runat="server">  
    protected void Button1_Click(object sender, System.EventArgs e) {  
        Label1.Text = "Your city name: " +  
            TextBox1.Text.ToString();  
    }  
</script>  

<html xmlns="http://www.w3.org/1999/xhtml">  
<head runat="server">  
    <title>PostBackUrl Example: how to submit a page to another page in asp.net</title>  
</head>  
<body>  
    <form id="form1" runat="server">  
    <div>  
        <asp:Label ID="Label1" runat="server" Font-Size="Large" ForeColor="DarkSlateBlue"></asp:Label>  
        <br />  
        <asp:Label ID="Label2" runat="server" Text="Your City" AssociatedControlID="TextBox1"></asp:Label>  
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>  
        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1" Text="*"></asp:RequiredFieldValidator>  
        <br />  
        <asp:Button ID="Button1" runat="server" Text="Submit in this page" OnClick="Button1_Click" />  
        <asp:Button ID="Button2" runat="server" Text="Submit in city page" PostBackUrl="~/CityPage.aspx" />  
    </div>  
    </form>  
</body>  
</html> 

在第二页

<%@ Page Language="C#" %>  

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  

<script runat="server">  
    protected void Page_Load(object sender, System.EventArgs e) {  
        TextBox PP_TextBox1;  
        PP_TextBox1 = (TextBox)PreviousPage.FindControl("TextBox1");  
        Label1.Text = "Your City: " +  
            PP_TextBox1.Text;  
    }  
</script>  

<html xmlns="http://www.w3.org/1999/xhtml">  
<head runat="server">  
    <title>City Page</title>  
</head>  
<body>  
    <form id="form1" runat="server">  
    <div>  
        <h1>City Page</h1>  
        <asp:Label ID="Label1" runat="server" Font-Size="Large" ForeColor="Crimson"></asp:Label>  
    </div>  
    </form>  
</body>  
</html> 

我认为这会对你有帮助....