У меня есть элемент управления подробным просмотром ASP.Net. Его DataSourceId меняется, и я соответственно устанавливаю его в Page_load ... (на основе подтипов LLBLgen, но это не так уж важно)
Полагаю, это жизненный цикл страницы Утечка абстракции Я не "получаю".
Проблема в том, что я привязываюсь к полям, которые могут или не могут быть там в зависимости от источника данных ...
Чтобы «отключить» связанное поле при определенных условиях, я попытался обернуть связанное поле в панель, которую я установил видимым или невидимым в коде позади, но все равно получаю следующую ошибку:
Sys.WebForms.PageRequestManagerServerErrorException: DataBinding: объект не содержит свойства с именем FilePrefix.
Я изменил detaislview.datasourceid в загрузке страницы ... возможно, слишком поздно в жизненном цикле.
Я не хочу связываться с этим полем, поскольку оно не существует для нового источника данных, но тем не менее оно пытается сделать это, и я получаю ошибку.
Есть идеи? ;)
[Отредактировано]: Код по запросу ...
ASP, столбец с подробным обзором:
<asp:TemplateField>
<ItemTemplate>
<asp:Panel ID="pnlNormalAdditionalFields" runat="server" Visible="false">
<asp:textbox id="txtFilePrefix" runat="server" MaxLength="250" Width="180px" text='<%# Bind("FilePrefix") %>'></asp:textbox>
<asp:requiredfieldvalidator id="valFilePrefix" runat="server" errormessage="File Prefix is required." controltovalidate="txtFilePrefix">*</asp:requiredfieldvalidator>
</asp:Panel>
</ItemTemplate>
</asp:TemplateField>
Кодовый код: (определите источник данных, detaislview виден при обратной передаче только при отображении сетки при начальной загрузке страницы.)
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack) //initial load
{
}
else //postback
{
//set customdatasource for grid & detailsview
switch (radAccountType.SelectedValue)
{
case "Normal":
dvAccount.DataSourceID = "NormalCollectionDataSource";
AccountRadGrid.customDataSourceId = "NormalCollectionDataSource";
break;
case "Reseller":
dvAccount.DataSourceID = "ResellerCollectionDataSource";
AccountRadGrid.customDataSourceId = "ResellerCollectionDataSource";
break;
...
Показать / скрыть панель:
protected void dvAccount_OnPreRender(object sender, EventArgs e)
{
Panel pnlGroupStoreAdditionalFields = ControlHelper.FindControlFromTop(this, "pnlGroupStoreAdditionalFields", null) as Panel;
pnlGroupStoreAdditionalFields.Visible = false;
switch (radAccountType.SelectedValue)
{
...
case "GroupStore":
ddlAccountType.SelectedValue = Constants.Account.Type.GroupStore;
pnlGroupStoreAdditionalFields.Visible = true;
break;
}
}
}