我有一个剃须刀辅助方法需要接受一个Func<>
返回一些 HTML 内容以打印出来的方法。这是我最初拥有的:
@helper node(string title, Func<HelperResult> descriptions)
{
....
<div>@descriptions()</div>
....
}
@node("title",
new Func<HelperResult>(() =>
{
return new HelperResult(
@<text>
<span>"desc1"</span>
<span>"desc2"</span>
</text>);
}))
不幸的是,我的文字永远不会被打印出来。也没有错误。
所以我了解了内联助手,并将调用方法更改为:
@node("title",
@<text>
<span>"desc1"</span>
<span>"desc2"</span>
</text>)
但是现在我得到一个编译错误说
“委托‘System.Func’不接受 1 个参数”。
但我没有传递任何论据。
因此,如果我将其更改为Func<object,HelperResult>
然后使用它调用它,则会@descriptions(null)
收到以下错误:
“如果不先将 lambda 表达式转换为委托或表达式树类型,则不能使用 lambda 表达式作为动态分派操作的参数”
我确定我在某处有问题,但我不确定它是什么。
编辑:我想我可能已经解决了这个问题,但它引入了一些其他问题。
我所做的是在传递给动态方法之前转换 lambda。我想这就是错误想说的:
@node("title",
((Func<dynamic, HelperResult>)(@<text>
<span>"desc1"</span>
<span>"desc2"</span>
</text>))
这行得通,它可以正确打印出span
标签。不幸的是,我在调用 this 时必须传入一个无用的参数Func
。
现在我遇到的问题是,我的真正功能不仅仅是写一些跨度。它更像是这样的:
@node("title",
((Func<dynamic, HelperResult>)(@<text>
<span>@Helpers.Format(resource.Description,"item")</span>
</text>))
另一个助手在哪里@Helpers.Format
,资源是页面模型中的(动态)变量。
当然现在代码运行但没有打印出来(在<span>
标签内)。我在我的辅助函数中放置了一个断点Format
,它会命中它并且所有参数都已正确设置,所以我不确定它为什么不能正确输出。同样,如果我只是将其更改为 resource.Description 则仍然没有任何输出。
由于它在此上下文之外运行良好,我想知道 Razor 的内联助手是否不捕获外部变量?