当我在我的DotLiquid模板中循环IEnumerable时
{% for block in Blocks -%}
// this works
{{ block.Structure }}
// this doesn't
{% RenderObject block.Structure %}
{% endfor -%}
我可以通过block.Structure
直接呈现成员,但我不知道如何在我自己的标记类RenderObject
中访问此Structure对象:
public class RenderObject : Tag
{
private string _tagName;
private string _markup;
public override void Initialize(string tagName, string markup, List<string> tokens)
{
_tagName = tagName;
_markup = markup.Trim();
base.Initialize(tagName, markup, tokens);
}
public override void Render(Context context, TextWriter result)
{
// HERE COMES THE QUESTION
// How to access the block.Structure object here?
var structure = ?
答案 0 :(得分:3)
您可以使用传递到context
方法的RenderObject.Render
对象。 Context
上有一个索引器可以将变量名称解析为变量。 (并且For
标记将循环变量(即示例中的block
)放入context
。)
剩下的问题是获取变量名称(“block.Structure”)。幸运的是,这正是传递给markup
的{{1}}变量的用途。
所以这应该有效:
RenderObject.Initialize