2013-08-28 3 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 
    } 
}