Я пытаюсь создать 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