DotLiquid 中的子标签上下文(带表单)

Subtag context in DotLiquid (with forms)

我希望能够在子标签中访问传递给 DotLiquid 中表单标签的对象。像这样:

{% form '/action' requestObject %}
    {% textinput Name %}
    <button type="submit">Create Request</button>
{% endform %}

其中 textinput 标记在 requestObject 上查找 name 字段,然后将值放入文本输入字段。我的 liquidese 相当生疏,所以如果我做错了这一切,我愿意连贯地尖叫我是个多么愚蠢的人以及我需要做些什么才能变得更好。

使用 ContextStack 在标签渲染器中很容易完成:

public class Form : Block
{
    // public override void Initialize...
    public override void Render(Context context, TextWriter writer)
    {
        context.Stack(() =>
        {
            context["form_obj"] = new FormObject();
            result.Write("<form>");
            base.Render(context, result);
            result.Write("</form>");
        }
    }
}

在 运行 传递给它的操作之前,Stack 压入一个新的 Hash 变量堆栈(在链中查找未设置的变量),然后在末尾将其弹出。非常适合局部变量范围。