数据绑定属性并获取它们的值(ASP.Net)

时间:2009-09-04 19:12:34

标签: c# asp.net webforms

假设我有这个用户控件

public class test : UserControl {
   public int Count { get; set; }

   public test() { 
      Count = 3;
   }

   public override DataBind() {
      aRepeater.DataSource = dal.GetObjects(Count);

      base.DataBind();
   }
}

我在我的页面上使用它

<my:test runat="server" Count="<# something %>" />

我现在的问题是,在调用base.DataBind()之前,我无法在我的usercontrol中获取Count的值。我想它的数据绑定值本身。因此,解决方法就是

public override DataBind() {
   base.DataBind(); // to bind values to self

   aRepeater.DataSource = dal.GetObjects(Count);

   base.DataBind(); // to bind new values that is dependent on the the first bind
}

它有效,但它似乎不对。我的问题是,最佳做法是针对这种情况。

3 个答案:

答案 0 :(得分:1)

这是有道理的,因为Count="<# something %>"发生在DataBind()。我认为在这种情况下你应该处理DataBind()处的所有数据绑定(而不是使用页面绑定方法)。当然,这只是美化代码的问题 - 仅此而已。

答案 1 :(得分:1)

只需覆盖OnDataBinding方法,而不是DataBind:

protected override void OnDataBinding(EventArgs e) {
    base.OnDataBinding(e);
    aRepeater.DataSource = dal.GetObjects(Count);
}

DataBind方法基本上包括两个步骤:1)OnDataBinding(),2)每个子控件的DataBind()。

答案 2 :(得分:0)

您是否必须在.ascx文件中设置用户控件的Count属性?如何完全没有Count属性或在包含用户控件的页面后面的代码中设置Count?

 <my:test runat="server" id="test1" />

代码背后:

//User control code behind.  GetCount() returns an int.
public override DataBind() {

    aRepeater.DataSource = dal.GetObjects(GetCount());   
    base.DataBind(); 
}

//Page that has the user control. 
protected void Page_Load(object sender, EventArgs e)
{
    this.test1.Count = 5;        
}

//User control code behind.
public override DataBind() 
{           
    aRepeater.DataSource = dal.GetObjects(this.Count);   
    base.DataBind(); 
}