asp.net - 如何在 .Net Core MVC 中将 csHtml 传递给 ViewComponent?
问题描述
我想将 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>
这甚至可能吗?我一直在搜索,但没有找到任何有关如何执行此操作的示例。
编辑:得到它的工作!感谢大家的帮助。
下面是一些关于如何做到这一点的示例代码:
调用视图组件:
@{
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>
解决方案
您应该能够将参数添加到 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>") })
您的视图组件 IViewComponentResult 看起来像这样,使用 ViewBag 只是作为示例
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 来传递也是一种选择
推荐阅读
- oracle - 管道函数oracle中的动态sql
- flutter - 使用cubit订阅,需要创建Timer(streamsubscription with cubit flutter)
- lisp - 自动将矩形转换为已知度数的凹弧
- docker - 无法连接到 Docker 上托管的 MLFlow 模型
- python - Python中使用月份缩写的正则表达式
- python - 如何使用 for 循环提取 loan_price 低于 500 的贷款?
- interface - 为什么不能在接口上使用带有表达式的 C# 9
- python - 通过 Discord.py 获得角色
- https - HTTPS 代理服务
- java - 通过单选按钮从 Thymeleaf 获取输入,将包装对象中的列表返回给控制器