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

时间:2017-02-27 20:17:34

标签: c# razor asp.net-core asp.net-core-mvc html-helper

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

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

@helper EditIcon()
{
    <i class="glyphicon glyphicon-pencil"></i>
}

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

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

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

4 个答案:

答案 0 :(得分:5)

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

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

修改

毕竟,looks like html助手are available。他们还没有被妥善记录!

答案 1 :(得分:3)

@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>;
}

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

@BrowserInfo("Google Chrome", "http://www.google.com/chrome/", "browser_chrome.gif")(null)

答案 2 :(得分:3)

我个人认为,这种方法对于较小的页面内摘要比较干净:

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>
    }
}

并像这样放置它:

@{ Template(new[] { "A","B","C" },  "pretty" ); }

答案 3 :(得分:0)

我已成功将ASP.NET MVC剃刀助手转换为.NET CORE 3.1中的功能指令,如下所示:

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

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


@helper RenderHello() {
        <strong>Hello</strong>
}

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

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

@functions {
    private void RenderHello()
    {
        <strong>Hello</strong>
    }
}

Razor Function Directives