谁能给我一个 PostbackUrl 的工作示例,其中目标页面和上一页都有母版页。
例如,假设我有两个页面default1.axpx和default2.aspx。他们都有一个母版页 MyMasterpage.masterpage
我想从default1.aspx回发到default2.aspx,然后从 default2 页面中的 default1 页面控件中提取数据。
我怎样才能做到这一点?
谁能给我一个 PostbackUrl 的工作示例,其中目标页面和上一页都有母版页。
例如,假设我有两个页面default1.axpx和default2.aspx。他们都有一个母版页 MyMasterpage.masterpage
我想从default1.aspx回发到default2.aspx,然后从 default2 页面中的 default1 页面控件中提取数据。
我怎样才能做到这一点?
你应该把这个问题命名为“我如何在 a 中找到一个控件ContentPlaceholder
?”,因为你的问题不是它PreviousPage
不起作用,而是你不明白它是如何ContentPlaceholder
工作的。
这个问题与母版页本身无关,完全与使用 a 相关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 的文本框。然后,在Page_Load
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
如果页面有母版页,它就不能正常工作”,因为它完全按照它应该的方式工作。问题是你不知道它应该如何工作。了解页面对象模型的工作原理。
你试试这个
这是第一页
<%@ 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>
我想这会对你有所帮助....