所以我想出了怎么做。
我使用了本教程中有关助手的部分内容:带有 Razor 的模板
并对其进行了修改,使其与 ViewComponents 一起使用。
所以为了让它工作,在一个最小的例子中,创建一个 ViewComponent 类,如下所示:
[ViewComponent(Name = "Test")]
public class VCTest : ViewComponent
{
public IViewComponentResult Invoke(Func<dynamic, object> Content)
{
return View(Content);
}
}
在这样的 cshtml 文件中创建您想要的实际模板:
@model Func<dynamic, object>
<div id="SomeTemplateTest">
@Model(null)
</div>
在这个非常简单的例子中,我只使用 Func 作为模型,因为只有一个参数,但对于更多参数,您只需要调用 @Model.funname(null) 而不仅仅是 @Model(null)。没什么大不了。
从您的视图中调用此组件时,请预先创建您的子元素,如下所示:
@{Func<dynamic, object> children=
@<div>
<vc:child var1="a" var2="b"></vc:child>
<vc:child var1="c" var2="d"></vc:child>
<vc:child var1="e" var2="f"></vc:child>
</div>;}
div 仅用于封装所有元素。我还没有找到解决方法,但它没有重大影响。
然后调用相应的参数传递参数的父 ViewComponent 标记:
<vc:test content="children"></vc:form-test>
就是这样,完美地工作。不幸的是,我找不到更无缝的方式。但这确实有效。
如果有人知道更好的选择,我很想知道更多。