我有一个需要采取的剃刀helper方法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表达式作为参数传递给一个动态分派操作,而不首先将其浇铸到一个委托或表达式树类型”
我敢肯定,我有什么不对的地方,但我不知道它是什么。
编辑 :我想我可能已经解决了这个问题,但它引入了其他一些问题。
我所做的就是突入动态方法之前投的拉姆达。 我想这就是错误想说:
@node("title",
((Func<dynamic, HelperResult>)(@<text>
<span>"desc1"</span>
<span>"desc2"</span>
</text>))
这一工程,并打印出span
正确的标签。 不幸的是我有调用此当一个无用的参数来传递Func
。
现在我有问题是我真正的功能做更多的不仅仅是写一些跨度。 它更像是这样的:
@node("title",
((Func<dynamic, HelperResult>)(@<text>
<span>@Helpers.Format(resource.Description,"item")</span>
</text>))
凡@Helpers.Format
是另一个助手和资源是从页面模型(动态)变量。
当然,现在的代码运行,但没有被打印出来(内侧<span>
标记)。 我把我的断点内部Format
的辅助功能,它击中它和所有的参数设置是否正确,所以我不知道为什么它不会正确输出。 同样的,如果我只是将其更改为resource.Description再没有什么仍然得到输出。
由于它的工作原理以及这种背景之外,我不知道它Razor的直列助手没有捕捉到外部变量?