У меня возникли проблемы с отображением поля объекта одного из моих объектов в приложении asp.net. DataBinder.Eval
возвращение Nothing
почему-то.DataBinder.Eval возвращает null, хотя поле заполнено
У меня есть 2 классов следующим образом:
Public Class Bench
<ScaffoldColumn(False), StringLength(50), Key> _
Public Property Code() As String
<Required> _
Public Property Type() As BenchType
<Required, StringLength(50)> _
Public Property Name() As String
...
End Class
Public Class BenchType
<ScaffoldColumn(False), Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)> _
Public Property ID() As Integer
<Required, StringLength(50)> _
Public Property Name() As String
...
End Class
Я пытаюсь отобразить Bench
объекты в GridView
следующим образом (с правильно реализован ObjectDataSource
odsBenches
):
<asp:GridView ID="grwBenches" runat="server" DataSourceID="odsBenches"
DataKeyNames="Code,Type,Name" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField HeaderText="Code">
<ItemTemplate>
<asp:Label id="lblCode" runat="server" Text='<%# Bind("Code")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Name">
<ItemTemplate>
<asp:Label id="lblName" runat="server" Text='<%# Bind("Name")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Bench Type">
<ItemTemplate>
<asp:Label id="lblBenchType" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Type.Name")%>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Code
и Name
поля отображаются в порядке, но поле Type
показано как пустое, это результирующая разметка с отображаемой страницы:
<table cellspacing="0" rules="all" border="1" id="MainContent_grwBenches" style="border-collapse:collapse;">
<tr>
<th scope="col">Code</th><th scope="col">Name</th><th scope="col">Bench Type</th>
</tr><tr>
<td>
<span id="MainContent_grwBenches_lblCode_0">OK Code</span>
</td><td>
<span id="MainContent_grwBenches_lblName_0">OK Name</span>
</td><td>
<span id="MainContent_grwBenches_lblBenchType_0"></span>
</td>
</tr>
</table>
Когда я пошагово код, Оказывается, что <%# DataBinder.Eval(Container.DataItem, "Type.Name")%>
возвращается Nothing
, но когда я проверить базу данных, то Type
поле содержит код типа.
В чем может быть проблема?
Edit (DAL код):
Public Function GetBenches() As IQueryable(Of Bench)
Return _db.BENCHES
End Function
_db
Где находится объект DbContext.
Вы можете попробовать <% # DataBinder.Eval ("Тип")%> и если это ничего (это должно быть результатом .ToString()), тогда ваш код возвращает экземпляр типа null. База данных в порядке не означает, что код в порядке. –
Это действительно так, но я использую Entity Framework для автоматического создания базы данных из объектов. Что я должен проверить? – Teeracroptus
В этом случае вы имеете в виду '<% # DataBinder.Eval (" Тип ")%>' ничего? В этом случае вы можете проверить небольшое консольное приложение, что происходит. Просто используйте метод, используемый ObjectDataSource, и отлаживайте полученный результат. Или, если вы используете SQL Server, посмотрите в профилировщике SQL Server. –