将 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<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" />@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】:
所以,似乎只有三个选项:
所以没有简单的方法来迁移 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 应用程序
如何先用asp.net身份框架数据库将asp.net mvc迁移到asp.net core