我想将csHtml传递给这样的ViewComponent:
<vc:some-component title="Title"
body="@Html.Raw("<div>this is a nice div, my name is @Model.Name</div>")">
</vc:some-component>
如您所见,我想传递包含对变量或模型的引用的HTML(这就是为什么我称其为csHtml而不是HTML的原因)。
这是ViewComponent代码:
<div>
<p>@Model.Title</p>
@Model.Content
</div>
这甚至可能吗?我一直在搜索,但没有找到任何执行此操作的示例。
编辑:正常工作!谢谢大家的帮助。
下面是一些有关如何执行此操作的示例代码:
调用ViewComponent:
@{
Func<dynamic, object> children =
@<div>
<p style="color: white">aaaa</p>
<p style="color: white">bbbb</p>
<p style="color: white">bbbb</p>
</div>;
}
<vc:some-component body=@children>
</vc:some-component>
查看组件内容:
@model SomeComponentModel
<div>
@Model.Body("")
</div>
答案 0 :(得分:2)
您应该能够将参数添加到ViewComponent,并在进行时将其传递给ViewComponent视图本身。
<vc:some-component title="Title"
body="@Html.Raw("<div>this is a nice div, my name is @Model.Name</div>")">
</vc:some-component>
或与此类似的东西
@await Component.InvokeAsync("SomeComponent", new { title="Title", body= Html.Raw($"<div>this is a nice div, my name is {Model.Name}</div>") })
以ViewBag为例,您的viewcomponent IViewComponentResult看起来像这样
public async Task<IViewComponentResult> InvokeAsync(string title, string body)
{
//...
ViewBag.Content = body;
ViewBag.Title = title;
//...
return View();
}
然后在相关的ViewComponent视图中
<div>
<p>@ViewBag.Title</p>
@ViewBag.Content
</div>
创建更具体的ViewModel进行传递当然也是一种选择
答案 1 :(得分:1)
是的,有可能,您必须采取一种解决方法,但是这是可以实现的,this answer提供了您所寻找的示例。