Ошибка шаблона NVelocity в c #

Я новичок в использовании NVelocity. Я пытаюсь отредактировать некоторые старые шаблоны для своей компании и получаю эту ошибку, которую я не понимаю. ОК, значит, в шаблоне, если в заказе несколько отправлений, отображается несколько названий отправлений, а если только одно, то отображается только одно имя отправления. когда есть несколько отправок, он работает нормально, НО, когда есть только один, тогда каким-то образом шаблон не отображает требуемое имя доставки, вместо этого распечатывает имя класса.

 #if($order.Shipments.Count > 1) 
 #foreach($shipment in $order.Shipments)
 #beforeall 
 #each 
 $shipment.ShipMethodName <strong>|</strong> 
 #else
 $order.Shipments[0].ShipMethodName  // in emails it renders "Orders.OrderShipmentCollection[0].ShipMethodName"
 #end
 #end

Пожалуйста помоги.


person patel.milanb    schedule 05.09.2013    source источник
comment
Извините, если глупый вопрос, но ваше предложение else, похоже, просто обрабатывает случай отгрузки 0. Я ошибся ?   -  person jbl    schedule 05.09.2013
comment
да ... правильно .... я отредактировал вопрос ... кажется, что он все еще не работает ...   -  person patel.milanb    schedule 06.09.2013
comment
Я использую @jbl, меня смущает ваш оператор if, в котором есть ›0, а не› 1. Вы также отредактировали ошибку в шаблоне, потому что теперь в нем отсутствует оператор #end для foreach. Если вы не знаете, NVelocity обычно записывает ссылку на переменную шаблона (например, $ order.Shipments [0] .ShipMethodName), когда что-то имеет значение null или сбой, но он не должен записывать имена типов. Я бы попробовал распечатать $ order.Shipments [0] и отладить передаваемые данные.   -  person Jonathon Rossi    schedule 06.09.2013


Ответы (1)


Я знаю, что это старый вопрос, но в случае, если кто-то позже будет искать решение, я подумал, что опубликую ответ, поскольку я просматривал старые вопросы, на которые не было принято ответов. Не понимаю, как я не заметил ошибки, когда разместил этот комментарий в сентябре прошлого года.

$order.Shipments[0].ShipMethodName дает вам Orders.OrderShipmentCollection[0].ShipMethodName, потому что NVelocity не поддерживает индексаторы, такие как C #, вам необходимо использовать метод get_Item(), т.е. $order.Shipments.get_Item(0).ShipMethodName, который является базовым методом, который компилятор C # создает для индексаторов.

Что происходит: $order.Shipments распечатывает имя типа (Orders.OrderShipmentCollection), а остальные [0].ShipMethodName просто печатаются дословно.

person Jonathon Rossi    schedule 03.10.2014