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();
}
}
这很好地显示和隐藏适当的控件,但问题是,当页面回发时,值正在丢失。
有关如何使这项工作的任何想法?
显示,你在做数据绑定到'FormView'代码。您需要确保它在回发后不会重新绑定。也就是说,它被封装在一个'if(!IsPostBack){}'中。 – Khan