Sha*_*dow 6 razor asp.net-core-mvc asp.net-core
基本上我需要像旧的asp.net
@helper MakeNote(string content) {
<p><strong>Note</strong> @content </p>
}
Run Code Online (Sandbox Code Playgroud)
或JSX
MakeNote(note) {
return (<div>Note {note}</div>);
}
Run Code Online (Sandbox Code Playgroud)
部分视图不是一种选择.我很满意返回IHtmlString的函数,或写入底层编写器的函数.
它还需要在函数内部支持Razor语法(不仅仅是字符串连接).
Vit*_*tox 15
从ASP.NET Core 3.0 开始,我们可以在Razor 代码块中声明包含标记的本地函数作为模板方法:
@{
void RenderName(string name)
{
<p>Name: <strong>@name</strong></p>
}
RenderName("Mahatma Gandhi");
RenderName("Martin Luther King, Jr.");
}
Run Code Online (Sandbox Code Playgroud)
它呈现以下 HTML 代码:
<p>Name: <strong>Mahatma Gandhi</strong></p>
<p>Name: <strong>Martin Luther King, Jr.</strong></p>
Run Code Online (Sandbox Code Playgroud)
文档:https : //docs.microsoft.com/en-us/aspnet/core/mvc/views/razor?view=aspnetcore-3.0#razor-code-blocks
(只是为了完成)在ASP.NET Core 2.0 中,我们可以使用模板化 Razor 委托,结合<text></text>razor 标记(显式分隔转换),允许我们制作类似于过去的 ASP.NET MVC@helper标记的东西:
@{
Func<string, object> RenderName = @<text>
<p>
Name: <strong>@item</strong>
</p>;
</text>;
}
<div>
@RenderName("Victor")
</div>
Run Code Online (Sandbox Code Playgroud)
它呈现以下 HTML 代码:
<div>
<p>
Name: <strong>Victor</strong>
</p>
</div>
Run Code Online (Sandbox Code Playgroud)
文档:https
: //docs.microsoft.com/en-us/aspnet/core/mvc/views/razor?view=aspnetcore-2.0#templated-razor- delegates
文档<text></text>:https : //docs.microsoft.com/en -us/aspnet/core/mvc/views/razor?view=aspnetcore-2.0#razor-code-blocks
您可能正在寻找@functions这种用途Html.Raw。
这是显示两种功能样式的示例。第一个使用传统的块体,第二个使用表达式体。
它们都$@在字符串上具有前缀。
$启用{interpoloation}。@做逐字字符串,它可以跨越多行。第三种方式有点像黑客,它使我们可以在函数内部解析Razor。就像我们似乎能够使用原始@helper语法一样。
SomeRazorFile.cshtml
@using Microsoft.AspNetCore.Html
@functions
{
IHtmlContent MakeNote(string content)
{
return Html.Raw($@"
<p>
<strong>Note</strong> {content}
</p>
");
}
// an alternative that uses method shorthand
IHtmlContent MakeNoteToo(string content) => Html.Raw($@"
<p>
<strong>Note</strong> {content}
</p>
");
}
@{
// an alternative that parses razor
Func<string, IHtmlContent> MakeNoteThree =
@<p>
<strong>Note</strong> {@item}
</p>;
}
<div>
@MakeNote("Foo")
@MakeNoteToo("Bar")
@MakeNoteThree("Baz")
</div>
Run Code Online (Sandbox Code Playgroud)
编辑:添加了解析Razor的示例。有关详细信息,请参见https://github.com/aspnet/Razor/issues/715。
| 归档时间: |
|
| 查看次数: |
3582 次 |
| 最近记录: |