我有一个名为customer.aspx
的ASP.NET页面,其中包含一个用户控件customerdetails.ascx
。此用户控件从数据库中读取数据并填充一些字段。如果加载成功(如果有一些数据),则用户应该留在页面上。否则,页面应重定向到其他页面。此重定向在容器customer.aspx
页面中完成,而不是在控件中。
我应该为customer.aspx
和customerdetails.ascx
用于上述逻辑的ASP.NET页面循环事件(Page_Load Vs Page_Init)是什么?
答案 0 :(得分:1)
我正在重读这篇文章 - http://www.4guysfromrolla.com/articles/092904-1.aspx,旧的,但很好。我认为您应该能够从customer.aspx
的Page_Load事件中执行您需要的操作,因为那时用户控件已加载。只需检查用户控件的控件值和重定向,或不。
编辑:
实际上,我认为这取决于。控制概率必须预先加载,这会改变一切。
如果我们需要动态添加的控件来维护其视图状态,那么在Load View State阶段之前添加这些控件是至关重要的。也就是说,在加载视图状态之前,这些控件必须存在于页面的控件层次结构中。加载视图状态 - 初始化之前只有一个阶段。这意味着,如果我们希望动态控件保持视图状态,我们必须将它们添加到页面的Init事件中的控件层次结构中。
使用户控件可访问的一种方法(在底部回答):https://forums.asp.net/t/1674095.aspx?Loop+through+User+Controls+in+Content+Page
编辑:
用户控制
<h4>The User Control</h4>
<div>
<asp:Label ID="lblUserCtrl" runat="server" Text="Label"></asp:Label>
</div>
的.cs
public partial class Testing_Controls_TestCtrl : System.Web.UI.UserControl
{
// public properties
public Label lbl
{
get { return lblUserCtrl; }
set { lblUserCtrl = value; }
}
public bool isLoaded;
// end public properties.
protected void Page_Init(object sender, System.EventArgs e)
{
lblUserCtrl.Text = "User ctrl loaded at: " + DateTime.Now;
isLoaded = true;
}
protected void Page_Load(object sender, EventArgs e)
{
}
}
容器页面:
注意:即使我从代码加载它,我仍然必须注册控件。
<%@ Register Src="~/Testing/Controls/TestCtrl.ascx" TagPrefix="uc1" TagName="TestCtrl" %>
...etc...
<form id="form1" runat="server">
<h4>The Container Page</h4>
<div>
<asp:Label ID="lblContainerLabel" runat="server" Text="Label"></asp:Label>
</div>
<br />
<hr />
<asp:PlaceHolder ID="ph1" runat="server"></asp:PlaceHolder>
</form>
的.cs
public partial class Testing_user_control_test : System.Web.UI.Page
{
private bool ucIsLoaded;
protected void Page_Init(object sender, System.EventArgs e)
{
Testing_Controls_TestCtrl c = (Testing_Controls_TestCtrl)Page.LoadControl("~/Testing/Controls/TestCtrl.ascx");
ph1.Controls.Add(c);
c.lbl.Text += "<br />This is text appended to the user control by the container page.";
ucIsLoaded = c.isLoaded;
}
protected void Page_Load(object sender, EventArgs e)
{
lblContainerLabel.Text = "Container page loaded at: " + DateTime.Now + "<br />The user control is loaded: " + ucIsLoaded.ToString().ToUpper();
}
}
答案 1 :(得分:1)
如果你已经确定两个选项都在功能上运行,那么,为了提高性能,你应该更喜欢Page_Init。
如果您可能最终得到重定向,那么您希望让服务器在页面生命周期中尽快进行重定向,以避免在生命周期步骤中使用可能不必要的资源。