将 html 帮助程序迁移到 ASP.NET Core

Posted

技术标签:

【中文标题】将 html 帮助程序迁移到 ASP.NET Core【英文标题】:Migrate html helpers to ASP.NET Core 【发布时间】:2017-07-18 14:40:06 【问题描述】:

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

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

@helper EditIcon()

    <i class="glyphicon glyphicon-pencil"></i>

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

Point 正在为此编写一个标签助手,这是巨大的矫枉过正。 对于部分内容也是如此。视图组件也是如此。

我们正在谈论 Razor 的小 sn-p。我最好的选择是什么?

【问题讨论】:

不存在?你确定吗? @Alex 我在多个地方读过它。另外,当我尝试时,我得到The helper directive is not supported. @helper 已在 core-mvc 中删除 - 您需要使用视图组件等 @StephenMuecke 所以我的选择:1)标签助手,2)部分,3)查看组件。而已?也许还有其他我不知道的事情? AFAIK,就是这样(恕我直言,老 @helper 无论如何都是 MVC 团队的错误,很高兴看到他们消失了) 【参考方案1】:

@helper 指令已被删除,但如果您可以考虑使用Func&lt;dynamic, IHtmlContent&gt;,您正在迁移旧代码。这是一个例子:

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

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

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

【讨论】:

如果您只是复制/粘贴此示例,这将不起作用。您需要使用 @BrowserInfo("Google Chrome", "http://www.google.com/chrome/", "browser_chrome.gif")(null) 来适应 Func 中的 dynamic 参数。 如何去掉末尾的分号? 如何在多个视图之间共享它?【参考方案2】:

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

tag helpers partials view components

所以没有简单的方法来迁移 Razor sn-ps,而无需跳过障碍。


编辑

毕竟looks like html 助手are available。他们只是没有被正确记录!

【讨论】:

仅本地支持。无法在视图之间共享它。 助手根本不可用,文本具有误导性,让我阅读了整个对话。该团队明确表示他们不打算将他们带回来。 来自***.com/a/5159904/1942917 - mikesdotnetting.com/article/344/…【参考方案3】:

我个人认为这种方法更适合小型页面内 sn-ps:

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" ); 

【讨论】:

【参考方案4】:

我已成功将 ASP.NET MVC Razor Helpers 转换为 .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

【讨论】:

以上是关于将 html 帮助程序迁移到 ASP.NET Core的主要内容,如果未能解决你的问题,请参考以下文章

将 asp.net WebForms 应用程序中的组合表单/Windows 身份验证迁移到 asp.net MVC 应用程序

将用户从 Firebase 迁移到 ASP.NET

从 DotNetNuke 迁移到 ASP.NET Core

如何先用asp.net身份框架数据库将asp.net mvc迁移到asp.net core

如何将数据库从 SQL 服务器迁移到 SQL Azure,其中包含带有数据的 asp.net 成员资格提供程序

从 ASP.NET MVC 迁移到 ASP.NET Core MVC