2016-02-16 3 views
0

Мне не удалось извинить примеру: http://dotliquidmarkup.org/try-online с C#. У меня есть тот же самый пример и попытаться выполнить его с помощью следующего кода:Попытайтесь использовать DotLiquid с C#

var template = DotLiquid.Template.Parse(myTemplate); 
Message.Body = template.Render(DotLiquid.Hash.FromAnonymousObject(user)); 

Где MyTemplate точно так же, как в примере:

<p>{{ user.name | upcase }} has to do:</p> 
<ul> 
{% for item in user.tasks -%} 
    <li>{{ item.name }}</li> 
{% endfor -%} 
</ul> 

Но при попадании Рендер я получить сообщение об ошибке: Исключение типа «System.Reflection.TargetParameterCountException» произошел в mscorlib.dll, но не был обработан в коде пользователя , а внутреннее сообщение: несоответствие счетчика параметров.

Мой тип данных, как я сказал, это то же самое, как в примере:

public class User : DotLiquid.Drop 
{ 
    public string Name { get; set; } 
    public List<Task> Tasks { get; set; } 
} 

public class Task 
{ 
    public string Name { get; set; } 
} 

И я создать объект так:

var user = new User 
{ 
    Name = "Tim Jones", 
    Tasks = new List<Task> 
    { 
     new Task { Name = "Documentation" }, 
     new Task { Name = "Code comments" } 
    } 
}; 

Я не могу понять это, что вопрос с мой код. Поймите любую помощь ..

ответ

2

Вы используете Hash.FromAnonymousObject, который ожидает анонимный объект (как следует из названия).

Так передать анонимный объект:

template.Render(DotLiquid.Hash.FromAnonymousObject(new 
     { 
      user = new User 
      { 
       Name = "Tim Jones", 
       Tasks = new List<Task> 
       { 
        new Task { Name = "Documentation" }, 
        new Task { Name = "Code comments" } 
       } 
      } 
     })); 

Или в вашем случае (я не проверял, но это должно работать):

template.Render(DotLiquid.Hash.FromAnonymousObject(new { user = this.user })); 
+1

It's теперь работать, спасибо много! –

Смежные вопросы