雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

ASP.NET Core 使用Razor code blocks替代@helper

2024-10-13 36

@helper 是 ASP.NET Razor 视图引擎的一种语法,它允许你在 Razor 视图中定义和使用自定义 HTML 帮助程序。这些帮助程序可以被多次调用,以生成复杂的 HTML。

在ASP.NET MVC中可以使用@helper定义一个返回IHtmlString的方法。 当我们在页面上需要重复输出一些HTML时,并且仅作用在当前页面上时,@helper很有用。但是在把.NET Framework的网站改成.NET Core的时候发现.NET Core已经不支持@helper了。

在Github上看到https://github.com/aspnet/Razor/issues/281 Remove the @helper directive from Razor

从微软官网查到了现在@helper已经被Razor code blocks替代了。

https://learn.microsoft.com/en-us/aspnet/core/mvc/views/razor?view=aspnetcore-3.1#razor-code-blocks

Razor 代码块(Razor code blocks)以@开头,由{}括起。与表达式不同,代码块中的 C # 代码不会呈现。视图中的代码块和表达式共享相同的作用域,并按以下顺序定义:

@{
    var quote = "The future depends on what you do today. - Mahatma Gandhi";
}
<p>@quote</p>
@{
    quote = "Hate cannot drive out hate, only love can do that. - Martin Luther King, Jr.";
}
<p>@quote</p>

输出以下HTML的代码:

<p>The future depends on what you do today. - Mahatma Gandhi</p>
<p>Hate cannot drive out hate, only love can do that. - Martin Luther King, Jr.</p>

在代码块中,使用标记声明局部函数作为模板方法:

@{
    void RenderHtml(string title, string content)
    {
        <h1>@title</h1>
        <p>@content</p>
    }
}
@{
    RenderHtml("title", "content");
}

输出以下HTML的代码:

<h1>title</h1>
<p>content</p>

注意,这里不能用@RenderHtml("title1","content1"); 输出HTML,这样VS会提示错误:
CS0029:Cannot implicitly convert type 'void' to 'object'

更新于:1个月前
赞一波!

文章评论

评论问答