Проблема: , когда я пытаюсь выполнить обновление, используя EntityDataSource
и FormView
, которые имеют <asp:DropDownList>
ссылку на другую таблицу, страница загружается нормально с правильной настройкой, нопри обновлении я получаю это сообщение об ошибке:
Свойство с именем 'Vendor.VendorId' не найдено в объекте во время операции вставки, обновления или удаления.Убедитесь, что свойства, указанные в качестве выражений привязки, доступны для источника данных.
Среда и код: с использованием Visual Studio 2010, Entity Framework 4, ASP.NET веб-форм и SQL Server 2008 Express.
У меня есть две таблицы;Part
стол и Vendor
стол.Таблица Part
имеет столбец VendorId
, который связан с таблицей Vendor
, и ему разрешено быть NULL
.Он упакован в Entity Framework.
Часть, которая работает: Вот EntityDataSource
:
<asp:EntityDataSource ID="PartEntityDataSource" runat="server"
ConnectionString="name=PartDBEntities"
DefaultContainerName="PartDBEntities" EnableFlattening="True"
EntitySetName="Parts"
EntityTypeFilter="Part" Where="it.PartId = @PartId"
EnableUpdate="True" EnableInsert="True" Include="Vendor">
<WhereParameters>
<asp:QueryStringParameter Type="Int64" DefaultValue="null" Name="PartId"
QueryStringField="partid" />
</WhereParameters>
</asp:EntityDataSource>
(Примечание: я пробовал с EnableFlattening
вкл. и выкл.)
Это связано с FormView
:
<asp:FormView ID="PartEditorFormView" runat="server"
DataSourceID="PartEntityDataSource"
DataKeyNames="PartId">
Обратите внимание, что я принудительно FormView
перехожу в режим Edit
или Insert
в зависимости отдля параметров строки запроса.
Без DropDownList
я могу создавать и обновлять записи в базе данных.
Часть, которая не работает: теперь для DropDownList
.Сначала есть новый EntityDataSource
:
<asp:EntityDataSource ID="VendorEntityDataSource" runat="server"
ConnectionString="name=PartDBEntities"
DefaultContainerName="PartDBEntities" EnableFlattening="False"
EntitySetName="Vendors" />
А затем DropDownList
в EditTemplate
, используя Преобразование нуля в полях шаблона :
<asp:DropDownList ID="EditVendorDDL" runat="server"
DataSourceID="VendorEntityDataSource"
DataTextField='CompanyName'
DataValueField='VendorId'
AppendDataBoundItems="True"
SelectedValue='<%# Bind("Vendor.VendorId") %>'>
<asp:ListItem Selected="True" Value="">(none)</asp:ListItem>
</asp:DropDownList>
Как я уже говорил выше, начальная страница отображается нормально;DropDownList
содержит правильные записи, и правильный поставщик установлен на правильное значение.Простое нажатие на кнопку Update
вызывает вышеуказанную ошибку.
Вот соответствующая часть трассировки стека:
[InvalidOperationException: свойство с именем 'Vendor.VendorId' не было найдено в объекте во время вставки, обновления или удаленияоперация.
Убедитесь, что свойства, указанные как выражения привязки, доступны для источника данных.]
System.Web.UI.WebControls.EntityDataSourceView.ConvertProperties (значения IDictionary, PropertyDescriptorCollection propertyDescriptors, ParameterCollection referenceParameters, Dictionary`2 convertValues) + 263
System.Web.UI.WebControls.EntityDataSourceView.ExecuteUpdate (ключи IDictionary, значения IDictionary, IDictionary oldValues) + 256
System.Web.UI.DataSourceView.Update (ключи IDictionary, значения IDictionary, IDictionary oldValues, Обратный вызов DataSourceViewOperationCallback) + 95
Надеюсь, этого достаточно!