将html帮助器迁移到ASP.NET Core

gro*_*kky 4 c# html-helper razor asp.net-core-mvc asp.net-core

我正在将项目转换为ASP.NET Core.我需要迁移大量可重用的html帮助程序,但Core中不存在html帮助程序.

有些很复杂,有些简单.这是一个非常简单的例子:

@helper EditIcon()
{
    <i class="glyphicon glyphicon-pencil"></i>
}
Run Code Online (Sandbox Code Playgroud)

请注意,这只是一个例子.

Point正在编写一个标记助手,因为这是一种巨大的过度杀伤力.部分相同.视图组件也是如此.

我们谈论的是Razor的一小部分内容.什么是我最好的选择?

Dir*_*oer 14

就我个人而言,我认为这种方法对于小的页内片段来说更干净:

https://www.mikesdotnetting.com/article/344/what-happened-to-helpers-in-asp-net-core

[...] 其中之一是 Razor 助手的更正式的替代品。现在,您可以像以前一样将 HTML 标记包含在代码块中声明为本地方法的方法主体中,或者包含在 @functions 块中。如果需要异步处理,该方法应返回 void 或 Task。以下是 ASP.NET Core 3 中列表助手的编写方式:

@{
    void Template(string[] listItems, string style) 
    {
        <ul>
        foreach (var listItem in listItems)
        {
            <li class="@style">@listItem</li>
        }
        </ul>
    }
}
Run Code Online (Sandbox Code Playgroud)

并像这样放置它:

@{ Template(new[] { "A","B","C" },  "pretty" ); }
Run Code Online (Sandbox Code Playgroud)


mxa*_*sim 9

我已成功将 ASP.NET MVC Razor Helpers 转换为 .NET CORE 3.1 中的函数指令,如下所示:

例如 ASP.NET MVC 5 @helper 语法:

<div>
       @RenderHello();
</div>


@helper RenderHello() {
        <strong>Hello</strong>
}
Run Code Online (Sandbox Code Playgroud)

等效的 ASP.NET CORE 3.1 @functions 指令语法:

<div>
    <text>
    @{
        RenderHello();
    }
    </text>
</div>

@functions {
    private void RenderHello()
    {
        <strong>Hello</strong>
    }
}
Run Code Online (Sandbox Code Playgroud)

Razor 函数指令


gro*_*kky 5

所以,似乎只有三个选择:

所以没有简单的方法来迁移Razor片段,而不是跳过篮球.


编辑

所以看起来像 html帮助毕竟是可用的.他们只是没有被正确记录!


moh*_*eri 5

@helper指令已删除,但是如果您考虑使用Func<dynamic, IHtmlContent>它,则正在迁移旧代码。这是一个例子:

@{
    Func<dynamic, IHtmlContent> BrowserInfo(string btitle, string href, string imgfilename) =>
        @<div style="text-align: center">
            <a href="@href">
                <img src="~/content/images/browsers/@imgfilename" alt="@btitle"/>@btitle</a>
        </div>;
}
Run Code Online (Sandbox Code Playgroud)

并像使用旧的辅助方法一样使用它:

@BrowserInfo("Google Chrome", "http://www.google.com/chrome/", "browser_chrome.gif")(null)
Run Code Online (Sandbox Code Playgroud)

  • 如果您只是复制/粘贴此示例,这将不起作用。您需要使用 `@BrowserInfo("Google Chrome", "http://www.google.com/chrome/", "browser_chrome.gif")(null)` 来适应功能。 (2认同)