代码之家  ›  专栏  ›  技术社区  ›  vaheeds

可以用ASP中的标记帮助程序替换PartialView。净核心?

  •  0
  • vaheeds  · 技术社区  · 6 年前

    我是ASP的新手。净核心。我刚刚发现了TagHelpers,我可能会想到,理论上我们应该能够替换它 局部视图 具有 标签助手 .

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

    我想对了吗?还是误会?有人能清楚地解释这种区别吗?

    1 回复  |  直到 6 年前
        1
  •  6
  •   Community CDub    5 年前

    这是asp。净核心2.1+

    如果我正确理解了你的问题,你可以用你自己的TagHelper替换你所有的HtmlHelper部分视图,但是你已经可以用HtmlHelpers来做这件事了,所以这不是什么新鲜事。

    然而,两者之间是有区别的 HtmlHelpers , TagHelpers 以及部分观点。

    局部视图

    局部视图是一个Razor标记文件(.cshtml),它在另一个标记文件的渲染输出中渲染HTML输出。如 _partial.cshtml .

    HtmlHelper

    HtmlHelpers是在MVC框架中引入的,能够呈现html服务器端。很容易通过 @ 剃刀视野中的角色。

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

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

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

    TagHelper

    与asp。net内核中,TagHelpers是通过在razor视图中使用标记和属性来呈现服务器端html的另一种方式。除了html友好的视图外,它提供的html抽象更少。在下面的代码中,我使用了Partial TagHelper,其中 名称 属性定义视图的路径或名称,以及 对于 属性指定要计算的模型表达式(@model)。这意味着你不需要使用 for="@Model.Contact" 只是 for="Contact" .

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

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

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

    从上面可以看到,TagHelper和HtmlHelper都可以呈现局部视图。

    此外,如果你看asp。HtmlHelper的net core github

    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非常相似,您还可以创建自己的TagHelper,它可以替换整个局部视图。
    • TagHelper不会取代HtmlHelper,而是提供替代方法。然而,在我看来,帮助者更好。它们在VisualStudio编辑器中呈现得更好(使用的razor页面由于@HtmlHelpers而有很多格式问题),可读性更高,并且符合html。
    • 在局部 TagHelper ,你可以使用 model for 向部分用户提供数据,但决不能同时向两个用户提供数据。
    • 省略。名称中的cshtml将强制框架在页面、视图和共享文件夹中搜索视图。这完全是可选的。

    希望这有帮助

    推荐文章