EditTemplate で、他のフラグに基づいて、バインドされたプロパティのいずれかのテキスト ボックスまたはドロップダウンを表示できる FormView を作成しようとしています。
<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();
}
}
これは、適切なコントロールを表示および非表示にするのに問題なく機能しますが、問題は、ページがポストバックされると、値が失われることです。
これを機能させる方法についてのアイデアはありますか?