NET Core MVC中如何将csHtml传递给ViewComponent?

时间:2019-08-27 18:16:50

标签: asp.net asp.net-core .net-core asp.net-core-2.0 asp.net-core-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>

这甚至可能吗?我一直在搜索,但没有找到任何执行此操作的示例。


编辑:正常工作!谢谢大家的帮助。

下面是一些有关如何执行此操作的示例代码:

调用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>

2 个答案:

答案 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提供了您所寻找的示例。