Как использовать Eval () с именем столбца, который содержит точку (.)? - PullRequest
8 голосов
/ 27 сентября 2011

В моей таблице SQL Server есть столбец slno. (да, он содержит точку), который отлично работает в SQL Server.Однако <%#Eval("slno.")%> выдает ошибку:

Привязка данных: «System.Data.DataRowView» не содержит свойство с именем «slno».

Какэто можно решить?Я не могу изменить имя столбца в базе данных: я получаю данные из stored procedure, поэтому я не могу их изменить.

<ItemTemplate> <%#Eval("slno.") %> </ItemTemplate>

Ответы [ 3 ]

9 голосов
/ 27 сентября 2011

используйте

<%# ((DataRowView)Container.DataItem)["slno."] %>

В качестве альтернативы используйте

<%# DataBinder.Eval (Container.DataItem, "slno.") %>

Для справки MSDN см. http://msdn.microsoft.com/en-us/library/4hx47hfe.aspx

РЕДАКТИРОВАТЬ - Другая опция:

<%# DataBinder.GetPropertyValue(Container.DataItem, "slno.") %>

РЕДАКТИРОВАТЬ 2 - согласно комментариям:

AFAIK Eval обрабатывает строку как выражение, которое оценивается с использованием некоторых правил - эти правила имеют специальную обработку для точки ...

GetPropertyValue OTOH не применяет эти правила (это означает, что это НЕ полная замена для Eval AFAIK), что дает возможность обрабатывать случаи, когда точечная обработка Eval приводит к проблемам (как в этом случае).

0 голосов
/ 18 июля 2017

Я использовал DataBinder.GetPropertyValue () следующим образом:

DataBinder.GetPropertyValue(Container.DataItem, "Name of my Fields with(Parentheses)") 

и работал как шарм в проекте ASP.NET VB.

0 голосов
/ 06 июня 2014

Не использовать DataBinder.eval();eval() не может прочитать поле после точки (.).

Вместо этого используйте DataBinder.GetPropertyValue()

...