【问题标题】:How to use PostbackUrl in Pages with Masterpage如何在带有 Masterpage 的页面中使用 PostbackUrl
【发布时间】:2012-09-25 08:48:10
【问题描述】:

谁能给我一个 PostbackUrl 的工作示例,其中目标页面和上一个页面都有母版页。

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

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

我该怎么做?

【问题讨论】:

  • 我不明白母版页与任何东西有什么关系。母版页实际上是页面的子控件,而不是相反。因此,母版页与页面上可能存在的任何其他控件没有什么不同。
  • @MystereMan 如果页面有母版页,则 PreviousPage 将无法正常工作。如果页面有母版页,则 Rajpurohit 给出的示例将不起作用。
  • 是的,如果页面有母版页,PreviousPage 确实可以正常工作。问题是你不明白它应该如何工作,只知道你认为会工作。
  • @MystereMan 是的.. 也许我不明白。因此我问了这个问题。向我展示它是如何使用母版页完成的。如果您愿意给我一个令人震惊的例子,我将不胜感激。

标签: asp.net


【解决方案1】:

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

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

PreviousPage 与母版页配合良好,因此我对它们与您的问题有什么关系感到困惑。您可以访问上一页上您想要的任何属性,它实际上会起作用。例如:

 HtmlForm form = PreviousPage.Form; // this works fine
 Control ctrl = PreviousPage.Master.FindControl("TextBox1"); // this works as well

您可能遇到的问题是您尝试使用 FindControl() 在内容页面中查找特定控件,但它不起作用,正是因为您在 PreviousPage 上调用 FindControl,而不是在您要查找的控件所在的命名容器。

要找到您想要的控件,您只需在命名容器上执行FindControl。以下代码可以正常工作,假设占位符名为 ContentPlaceHolder1。

var ph = PreviousPage.Controls[0].FindControl("ContentPlaceHolder1");
var ctl = ph.FindControl("TextBox1");

您可以使用以下代码验证此问题与PreviousPage 无关,该代码仅使用单个页面并在自身上查找控件。在 Default.aspx 页面上放置一个名为 TextBox1 的文本框。然后,在Default.aspx.cs后面代码的Page_Load函数中放入这段代码,然后在调试器中运行并单步执行。

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 将无法正常工作”,因为它完全可以正常工作。问题是你不知道它应该如何工作。了解页面对象模型的工作原理。

【讨论】:

  • 如果可能的话,我会给你 10 票支持这个答案。在过去的 30 分钟里,我一直在努力解决这个问题。虽然我发现这是 ControlID 的问题,但不知道如何克服。谢谢!!
  • 对于那些现在来到这里的人,如果您发现 PreviousPage always 为空,阅读mikesdotnetting.com/article/293/… 可能会有所帮助 - 基本上 URL 在 POST 之后被重定向在VS2013+创建的Web Forms应用中默认获取并清除上一页数据
【解决方案2】:

你试试这个

这是第一页

<%@ 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> 

我想这会对你有所帮助....

【讨论】:

  • 这不使用母版页。
猜你喜欢
  • 2022-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 2011-09-19
  • 1970-01-01
  • 2011-12-05
相关资源
最近更新 更多