У меня есть форма поиска, которая предлагает ряд различных параметров поиска, таких как «поиск по естественному имени», «поиск по допустимому имени», «поиск по адресу» и т. Д. Они определяются статическими методами «фабрики» вPropertySearchOption
класс.Каждый параметр поиска указывает пользовательский элемент управления, содержащий поля поиска, необходимые для этого параметра, например, параметр естественного имени имеет поля имени и фамилии.Используемая опция поиска определяется RadioButtonList на главной странице поиска, и когда выбор изменяется в этом списке, я динамически загружаю требуемый пользовательский элемент управления.Моя проблема в том, что я не могу найти способ сохранить состояние просмотра динамического элемента управления и его полей поиска.Вот основной код, который я использую:
<asp:RadioButtonList ID="searchTypeOptions" runat="server" AutoPostBack="true" RepeatDirection="Horizontal" RepeatLayout="Flow" OnSelectedIndexChanged="SearchTypeOptionsSelectedIndexChanged">
<asp:ListItem Value="NaturalName">Name (Natural)</asp:ListItem>
<asp:ListItem Value="LegalName">Legal Name (Business)</asp:ListItem>
<asp:ListItem Value="ErfDetails">Erf Details</asp:ListItem>
<asp:ListItem Value="PhysicalAddress">Physical Address</asp:ListItem>
<asp:ListItem Value="FarmDetails">Farm</asp:ListItem>
</asp:RadioButtonList>
protected void Page_Init(object sender, EventArgs e)
{
if (!IsPostBack)
{
var typeOption = searchTypeOptions.SelectedItem;
if (typeOption == null)
{
searchTypeOptions.SelectedValue = "ErfDetails";
LoadSearchForm();
}
}
}
protected void SearchTypeOptionsSelectedIndexChanged(object sender, EventArgs e)
{
LoadSearchForm();
}
protected virtual void LoadSearchForm()
{
SearchOption = (PropertySearchOption)typeof(PropertySearchOption).GetProperty(searchTypeOptions.SelectedValue, BindingFlags.NonPublic | BindingFlags.Static).GetValue(null, null);
searchFormPlaceHolder.Controls.Clear();
var searchForm = LoadControl(SearchOption.FormControlUrl);
searchFormPlaceHolder.Controls.Add(searchForm);
searchTypeLabel.Text = SearchOption.Description;
}
Я должен установить EnableViewState в false на searchFormPlaceHolder
, или я получаю исключение viewstate, когда я пытаюсь изменить текущий параметри так динамический выбор форм поиска работает нормально.Однако при нажатии кнопки обратной передачи для выполнения поиска я теряю форму поиска, поскольку она создается только в Page_Init при первой загрузке, а не при обратной передаче.Если я помещу LoadSearchForm
за пределы блока if, произойдет сбой, потому что при обратной передаче SelectedValue
списка переключателей пуст.
Что я могу сделать или что я должен сделать в сценариикак, кроме того, убегать?