0

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();
    }
}

これは、適切なコントロールを表示および非表示にするのに問題なく機能しますが、問題は、ページがポストバックされると、値が失われることです。

これを機能させる方法についてのアイデアはありますか?

4

1 に答える 1

0

次のように、Page_Loadイベントで、ページが最初に読み込まれたときにのみドロップダウン リストをバインドするようにしてください。

protected void Page_Load(object sender, EventArgs e)
{
    if(!PostBack)
    {
        // Bind drop down list here
    }
}
于 2013-08-28T02:04:52.870 に答える