Использование c # dynamic со встроенным кодом на странице aspx - PullRequest
0 голосов
/ 22 февраля 2011

В моем коде позади меня есть public IEnumerable<dynamic> AllTransactions{ get; set; }, который состоит из {Transaction, String} (созданного через linq-to-sql как новый анонимный объект), где Transaction - это пользовательский класс, который я создал.

На моей странице aspx я хотел бы сделать следующее

<% foreach (dynamic trans in AllTransactions) { %>
    <span><%= trans.transaction.Amount %></span>
<% } %>

В своем коде я могу сослаться на trans.transaction.Amount внутри foreach, но мне кажется, что мне не повезло на страницах aspx. Я получаю исключение:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: «объект» не содержит определения для «транзакции»

В то же время, если у меня запущен отладчик, я могу посмотреть на «trans», и я вижу, что внутри него есть объект Transaction под названием «транзакция», и в нем также есть моя строка. Кроме того, объект транзакции внутри него содержит значение для Amount. Кажется, что Microsoft где-то конвертирует мою динамику в объект.

Еще один тест, который я выполнил, показал, как работает тип trans с GetType (), и получил следующее:

<> f__AnonymousTypef`2 [ProjectName.Packages.Investment.Business.Transaction, System.String]

Это не обычный «объект», поэтому я не уверен, что это за тип. Есть идеи, почему мой foreach не работает и что я могу сделать по-другому?

Ответы [ 2 ]

2 голосов
/ 22 февраля 2011

Попробуйте связать свои данные с ретранслятором .Он был разработан для вывода html для элементов в списках и поможет вам отделить ваш дизайн от вашей логики, что обычно считается гораздо лучшей практикой, чем попытка динамически генерировать html в сценарии.

0 голосов
/ 25 февраля 2011

Можете ли вы попробовать это, как показано ниже?

<% foreach (dynamic trans in AllTransactions) { %>
    <span><%= trans.Amount %></span>
<% } %>

Или вы можете проверить, содержит ли определение пользовательского класса Transaction переменную-член с именем «Transaction»?

...