Итак, я понял, как это сделать.
Я использовал часть этого урока о помощниках: Шаблоны с 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>
И все, отлично сработало.К сожалению, я не смог найти более плавный путь.Но это делает работу.
Если кто-нибудь знает лучшую альтернативу, я бы хотел узнать больше.