我正在试图找出为什么我可以在gridview中编辑得很好,但是我的删除命令会产生服务器错误。
我在删除AJAX回发时收到的错误消息如下:
208 | error | 500 |在插入,更新或删除操作期间,在实体上找不到名为“Member.fullname”的属性。检查以确保指定为绑定表达式的属性可用于数据源。|
当我执行编辑命令时,这不会发生,它可以正常工作。
我有3个实体(任务,成员,项目)。
在我的Gridview中显示Task表我设置了模板字段以显示用户友好的数据而不是id号:
<asp:GridView ID="TaskList" runat="server" DataSourceID="TaskSource" DataKeyNames="id"
AutoGenerateColumns="False">
<Columns>
<asp:TemplateField AccessibleHeaderText="Name" HeaderText="Name" >
<EditItemTemplate>
<asp:DropDownList ID="ddlMemberName" runat="server" DataSourceID="MemberSource"
DataTextField="fullname" DataValueField="id" SelectedValue='<%# Bind("member_id") %>'>
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblMemberName" runat="server" Text='<%# Bind("Member.fullname") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField AccessibleHeaderText="Task" HeaderText="Task">
<EditItemTemplate>
<asp:TextBox ID="txtMemberTask" runat="server" Text='<%# Bind("description") %>'
TextMode="MultiLine"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblMemberTask" runat="server" Text='<%# Bind("description") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
</Columns>
</asp:GridView>
我的EntityDataSources设置如下:
<asp:EntityDataSource ID="TaskSource"
DefaultContainerName="webteamEntities" runat="server"
ConnectionString="name=webteamEntities" EnableDelete="True"
EnableFlattening="False" EnableInsert="True" EnableUpdate="True"
EntitySetName="Tasks" Include="Project, Member" />
<asp:EntityDataSource ID="MemberSource"
DefaultContainerName="webteamEntities" runat="server"
ConnectionString="name=webteamEntities"
EnableFlattening = "False"
EntitySetName="Members" />
所以,如果我的datakeynames =“id”,为什么它甚至试图在删除时访问Member.fullname?甚至在那......为什么我的编辑工作得很好?
我错过了什么吗?
答案 0 :(得分:1)
在项目模板中用Eval替换Bind不会有害。 绑定是2路。 Eval是单向的。由于您只在项目模板中显示数据,因此Eval就足够了。