2013-08-28 23 views
0

我试图创建一个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 EmailFormView_DataBound(object sender, EventArgs e) { 
    var email = EmailObj; 

    if (email.EmailType == EmailType.Type1) { 
     EmailFormView.Row.FindControl("DelayHoursPlaceHolder").Visible = false; 
     EmailFormView.Row.FindControl("DelayDropdownPlaceHolder").Visible = true; 
    } 
    else { 
     EmailFormView.Row.FindControl("DelayHoursPlaceHolder").Visible = true; 
     EmailFormView.Row.FindControl("DelayDropdownPlaceHolder").Visible = false; 
     EmailFormView.Row.FindControl("DelayDropdownPlaceHolder").Controls.Clear(); 
    } 
} 

这很好地显示和隐藏适当的控件,但问题是,当页面回发时,值正在丢失。

有关如何使这项工作的任何想法?

+0

显示,你在做数据绑定到'FormView'代码。您需要确保它在回发后不会重新绑定。也就是说,它被封装在一个'if(!IsPostBack){}'中。 – Khan

回答

0

确保在您Page_Load事件,您只绑定下拉列表时,第一次加载页面,像这样:

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