如何在Razor中将一段Html渲染成变量?在Spark我曾经写过以下代码:
<content var="t">
<a class="tab" href="">Tab name</a>
</content>
<content var="tc">
<div class="tabcontent">
<p>Here goes tab content</p>
</div>
</content>
!{tabs(t, tc)}
Run Code Online (Sandbox Code Playgroud)
两个变量被传递给一个宏,该宏将内容完美地包装到选项卡表中.
在Razor中做同样事情的最佳方法是什么?
更新:我想我明白了..
在Razor中,@<text>...</text>构造可以是用户生成lambda表达式,可以在以后重用,这是将一段HTML分配给变量的扩展等价物.上面的例子可以通过以下方式实现:
Func<int, object> t =
@<text>
<a class="tab" href="">Tab name</a>
</text>;
Func<int, object> tc =
@<text>
<div class="tabcontent">
<p>Here goes tab content</p>
</div>
</text>;
@tabs(t(0), tc(0))
Run Code Online (Sandbox Code Playgroud)
我只是想不通如何编写无参数lambdas(Func<object>).int上面两个lambda中的参数都是虚拟的.Razor似乎需要一个参数(并且已经创建了一个变量"item"来表示它在表达式中).
是否可以使用Razor语法定义lambda表达式(delegate,Action,Func <>)的内容,以便在视图中执行此模型方法时,它将插入Razor内容?
这样做的目的是让我们的开发人员能够定义他们自己的自定义内容,以便插入CustomControl视图中的特定点.
以下是模拟我当前布局的精简示例代码.焦点的特定部分是RenderSideContent方法定义及其执行调用.
Index.cshtml
@model My.PageModel
@My.CustomControl(new CustomControlModel
{
AreaTitle = "Details",
RenderSideContent = () =>
{
<div>
@using (My.CustomWrapper("General"))
{
My.BasicControl(Model.Controls[0])
}
</div>
}
})
Run Code Online (Sandbox Code Playgroud)
CustomControl.cshtml
<div>
@Model.AreaTitle
<div class="my-custom-content">
@Model.RenderSideContent()
</div>
</div>
Run Code Online (Sandbox Code Playgroud)