【问题标题】:Can PartialViews replace with TagHelpers in ASP.NET Core?PartialViews 可以用 ASP.NET Core 中的 TagHelpers 代替吗?
【发布时间】:2018-11-11 15:36:21
【问题描述】:

我是 ASP.NET Core 的新手。我刚刚发现了 TagHelpers,我可能明白了,理论上我们应该能够用 tag helpers 替换 partial views

除此之外,TagHelper 可以接受输入,但PartialView 不能。

我觉得对吗?或者这是一个误解?任何人都可以清楚地解释其中的区别吗?

提前致谢!

【问题讨论】:

    标签: asp.net-core partial-views tag-helpers


    【解决方案1】:

    这适用于 asp.net core 2.1+

    如果我正确理解了您的问题,您可以将所有 HtmlHelper 部分视图替换为您自己的 TagHelpers,但您已经能够使用 HtmlHelpers 执行此操作,因此这不是什么新鲜事。

    但是,HtmlHelpersTagHelpers 和部分视图之间存在差异。

    部分视图

    部分视图是一个 Razor 标记文件 (.cshtml),它在另一个标记文件的呈现输出中呈现 HTML 输出。比如_partial.cshtml

    HtmlHelper

    HtmlHelpers 是随 MVC 框架引入的,以便能够在服务器端呈现 html。在 Razor 视图中通过 @ 字符轻松区分。

    @await Html.PartialAsync("_partial.cshtml", Model.Contact)
    

    除此之外,TagHelper 可以接受输入,但 PartialView 不接受。

    PartialAsync 中的第二个参数允许输入。

    标签助手

    使用 asp.net-core,TagHelpers 是另一种能够通过在 razor 视图中使用标签和属性来呈现服务器端 html 的方法。除了对 html 友好的视图之外,它提供的对 html 的抽象较少。在下面的代码中,我使用了 Partial TagHelper,其中 name 属性定义了视图的路径或名称,而 for 属性分配了将要评估的模型表达式(@模型)。这意味着您无需使用for="@Model.Contact",只需使用for="Contact"

    <partial name="_partial" for="Contact" />
    

    您也可以使用 model 属性,它只是在实例化时将模型传递给局部视图。

    <partial name="_partial" model='new Contact { Id = 1, Name = "Nick" }' />
    

    从上面可以看出,TagHelpers 和 HtmlHelpers 都可以渲染部分视图。

    此外,如果您查看 asp.net-core github 的 HtmlHelper

    https://github.com/aspnet/Mvc/blob/b18526cdc8d8c868e8d7f9c6c8484064215e1002/src/Microsoft.AspNetCore.Mvc.ViewFeatures/HtmlHelper.cs#L554

    并将其与 TagHelper 进行比较

    https://github.com/aspnet/Mvc/blob/b18526cdc8d8c868e8d7f9c6c8484064215e1002/src/Microsoft.AspNetCore.Mvc.TagHelpers/PartialTagHelper.cs#L216

    实际上两者都在调用 IView.RenderAsync() 并传入一个包含局部视图的 ViewContext。所以他们实际上在后面的代码中做同样的事情,除了它操纵 html 的方式。

    旁注:

    • 与 HtmlHelpers 非常相似,您也可以创建自己的 TagHelpers,它可以替换整个部分视图。
    • TagHelpers 不会取代 HtmlHelpers,而是提供替代方法。但是,在我看来,TagHelpers 更好。它们在 Visual Studio 编辑器中呈现更好(使用的剃须刀页面由于@HtmlHelpers 存在很多格式问题),更具可读性,并且符合 html。
    • 在部分TagHelper 中,您可以使用modelfor 向部分提供数据,但不能同时使用两者。
    • 从名称中省略 .cshtml 只会强制框架在 Pages、Views 和 Shared 文件夹中搜索视图。它完全是可选的。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-29
      • 1970-01-01
      • 2020-09-02
      • 2021-05-13
      • 1970-01-01
      相关资源
      最近更新 更多