我使用ascx用户控件来管理CRUD o数据库实体。我在我的aspx页面中重用这个userc控件,以readonly模式显示数据库中记录的数据库数据。用户控件内部有一个简单的FormView和一个objectdatasource。
现在,在包含ascx的aspx页面中我必须知道,在asp的DATABIND时间内,用户控件会考虑数据库记录的一些数据。用户控件是aspx页面之后的数据绑定,因此我没有数据。我必须在数据库的aspx页面中进行选择,并在用户控制之后进行相同的选择。
如何优化此流程?
答案 0 :(得分:1)
ASCX基础事件可能会在您的ASPX基础事件之后触发,但在整个生命周期中,您可以触发自己的事件。
您可以在ASCX上定义一个事件,让您的页面注册到此事件,然后将您的自定义事件从ASCX传播到ASPX,并使用参数中需要的任何数据
粗略的例子(可能无法编译):在ASCX中
public partial YourControl : System.Web.UI.UserControl {
public event EventHandler MyControlDataBound;
public void FireMyControlDataBound()
{
if (MyControlDataBound!= null)
{
MyControlDataBound(this, new EventArgs());
}
}
protected void MyDataBound(object sender, EventArgs e) {
// ......
FireMyControlDataBound();
}
}
并在ASPX中
public partial class MyPage: Page
{
protected void Page_Load(object sender, EventArgs e)
{
yourUserControlInstance.MyControlDataBound += HandleYourDataInYourPage;
}
protected void HandleYourDataInYourPage(object sender, EventArgs e) {
// .. do whatever needed in your page, with your data
// if you have defined a custom Args class that inherits EventArgs, your could collect data here...
}
}
如果您需要,可以随意创建一个继承EventArgs的类来传递数据
答案 1 :(得分:0)
您可以在Page
的init事件中将参数传递给UserContolprotected override void OnInit(EventArgs e)
{
base.OnInit(e);
var control = (UserControl)this.FindControl("UserControlId");
control.Property = ...;//Pass User Control properties
}