Asp.net 同一绑定属性的两个不同控件?

Asp.net 同一绑定属性的两个不同控件?,asp.net,webforms,asp.net-4.0,Asp.net,Webforms,Asp.net 4.0,我正在尝试创建一个FormView,它在EditTemplate中可以显示一个文本框或一个绑定属性的下拉列表,基于一些其他标志: <asp:FormView id="EmailFormView" runat="server" DefaultMode="Edit" DataSourceID="EmailDataSource" OnDataBound="EmailFormView_DataBound" > <EditItem

我正在尝试创建一个FormView,它在EditTemplate中可以显示一个文本框或一个绑定属性的下拉列表,基于一些其他标志:

<asp:FormView 
    id="EmailFormView" 
    runat="server" 
    DefaultMode="Edit" 
    DataSourceID="EmailDataSource"
    OnDataBound="EmailFormView_DataBound" 
>
    <EditItemTemplate>
        <asp:PlaceHolder ID="DelayHoursPlaceHolder" runat="server">
            <asp:TextBox CssClass="HoursBox" ID="ShortDelayTextBox" runat="server" Text='<%# Bind( "ShortDelay" ) %>' />
        </asp:PlaceHolder>
        <asp:PlaceHolder ID="DelayDropdownPlaceHolder" runat="server">
            <asp:DropDownList ID="ShortDelay" runat="server" SelectedValue='<%# Bind( "ShortDelay" ) %>'  
                DataValueField="Value" DataTextField="Text" DataSourceID="DropDownDataSource" />
        </asp:PlaceHolder>
    </EditItemTemplate>
</asp:FormView>
这可以很好地显示和隐藏适当的控件,但问题是当页面被发回时,值正在丢失


关于如何使其工作,有什么想法吗?

请确保在
页面加载事件中,仅在首次加载页面时绑定下拉列表,如下所示:

protected void Page_Load(object sender, EventArgs e)
{
    if(!PostBack)
    {
        // Bind drop down list here
    }
}

显示正在对
FormView
执行数据绑定的代码。您需要确保回发后不会重新绑定。也就是说,如果(!IsPostBack){}
,它将被包装在
中。
protected void Page_Load(object sender, EventArgs e)
{
    if(!PostBack)
    {
        // Bind drop down list here
    }
}