gpt4 book ai didi

asp.net - 如何在带有母版页的页面中使用 PostbackUrl

转载 作者:行者123 更新时间:2023-12-02 02:03:06 25 4
gpt4 key购买 nike

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

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

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

我怎样才能做到这一点?

最佳答案

您应该将这个问题命名为“如何在 ContentPlaceholder 中找到控件?”,因为您的问题不是 PreviousPage 不起作用,而是您不明白 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 即可。假设占位符名为 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 就无法正常工作”之类的话,因为它完全按照应有的方式工作。问题是你不知道它应该如何工作。了解页面对象模型的工作原理。

关于asp.net - 如何在带有母版页的页面中使用 PostbackUrl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12579311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com