2016-02-29 32 views
0

有3个下拉列表正在几个地方使用。所以我决定把它们放在一个userControl中。如何在ASP.NET中设置usercontrol属性的值?

<%@ Control Language="VB" AutoEventWireup="false" CodeFile="DetailsDropDownList.ascx.vb" 
    Inherits="UserControls_DetailsDropDownList" %> 

    <asp:DropDownList ID="dedMoth" runat="server"></asp:DropDownList> 
    <asp:DropDownList ID="dedDay" runat="server"></asp:DropDownList> 
    <asp:DropDownList ID="dedYear" runat="server"></asp:DropDownList> 

在后面的代码中,我定义了一个属性,以便捕获要显示的值。

public DateTime DetailsDate { get; set; } 

所以我设置的属性是这样的:myUserControl.DetailsDate = myObject.myDate

的问题是,没有值被设置。当我设置断点时,我注意到UserControl的生命周期在主页面之后开始。

我试过这个,但没有运气。

<uc1:DetailsDropDownList runat="server" ID="myUserControl" 
    DetailsDate ="<%= myObject.myDate%>" /> 

那么如何设置UserControl的值?

+0

看起来像在生命周期的早期设置值。你可以设置** Page_Load **内的值,并看到它的作品? – Win

+0

哪个页面加载,主页面或usecontrol的? – Richard77

+0

据推测,主页正在调用'myUserControl.DetailsDate = myObject.myDate',所以它应该在Page的'Page_Load'事件中。 –

回答

1

你需要坚持你的财产。如果你不这样,每次页面加载时都会重置它,就像任何其他局部变量一样。您可以很容易地坚持视图状态,虽然像这样:

public DateTime DetailsDate 
{ 
    get{ 
     if(ViewState["DetailsDate"] == null) 
     { 
       return DateTime.Today; 
     } 
     else 
     { 
       return (DateTime)ViewState["DetailsDate"]; 
     } 
    } 
    set {ViewState["DetailsDate"] = value;} 
} 
+0

我已经在上面的代码中放置了一个断点。但是,问题是,执行此行'myUserControl.DetailsDate = myObject.myDate'时,上述代码未被命中。 – Richard77

1

添加Page.DataBind();在Page_Load()事件中。这将绑定页面数据。一旦调试器通过页面加载检查,预计日期即将到来。