ASP.NET Core 中的 PartialViews 可以替换为 TagHelpers 吗?
Can PartialViews replace with TagHelpers in ASP.NET Core?
我是 ASP.NET Core 的新手。我刚刚发现 TagHelpers 并且我可能明白了,理论上我们应该能够用 tag helpers.
替换 partial views
除此之外,TagHelper
可以接受输入但 PartialView
不能。
我觉得对吗?还是误会?谁能解释清楚其中的区别?
提前致谢!
这是 asp.net 核心 2.1+
如果我对你的问题的理解正确,你可以用你自己的 TagHelpers 替换你所有的 HtmlHelper 部分视图,但你已经能够用 HtmlHelpers 做到这一点,所以这不是什么新鲜事。
但是,HtmlHelpers
、TagHelpers
和部分视图之间存在差异。
部分浏览量
局部视图是一个 Razor 标记文件 (.cshtml),它在另一个标记文件的呈现输出中呈现 HTML 输出。例如_partial.cshtml
.
HtmlHelper
HtmlHelpers 与 MVC 框架一起引入,以便能够呈现 html 服务器端。在剃须刀视图中通过 @
字符轻松区分。
@await Html.PartialAsync("_partial.cshtml", Model.Contact)
Beyond that, TagHelper can accept input but PartialView don't.
PartialAsync
中的第二个参数允许输入。
标签助手
使用 asp.net-core,TagHelpers 是另一种能够通过在 razor 视图中使用标签和属性来呈现服务器端 html 的方法。除了 html 友好的视图,它提供了较少的 html 抽象。在下面的代码中,我使用了部分 TagHelper,其中 name 属性定义了视图的路径或名称,for 属性分配将评估的模型表达式 (@Model)。这意味着您不需要使用 for="@Model.Contact"
而只需使用 for="Contact"
.
<partial name="_partial" for="Contact" />
您还可以使用 model 属性,它只是在实例化时将模型传递给局部视图。
<partial name="_partial" model='new Contact { Id = 1, Name = "Nick" }' />
从上面可以看出,TagHelpers和HtmlHelpers都可以渲染部分视图。
此外,如果您查看 HtmlHelperasp.net-core github
并将其与 TagHelper
进行比较
两者实际上都在调用 IView.RenderAsync()
并传入包含部分视图的 ViewContext
。所以他们实际上在代码背后做同样的事情,除了它操纵 html.
的方式
旁注:
- 与 HtmlHelpers 非常相似,您也可以创建自己的 TagHelpers,它可以替换整个局部视图。
- TagHelpers 不是要取代 HtmlHelpers,而是提供替代方法。但是,在我看来 TagHelpers 更好。它们在 visual studio 编辑器中呈现得更好(由于 @HtmlHelpers,使用的 razor 页面有很多格式问题),更具可读性,并且符合 html.
- 在部分
TagHelper
中,您可以使用 model
或 for
向部分提供数据,但不能同时使用两者。
- 从名称中省略 .cshtml 只会强制框架在页面、视图和共享文件夹中搜索视图。它完全是可选的。
希望对您有所帮助
我是 ASP.NET Core 的新手。我刚刚发现 TagHelpers 并且我可能明白了,理论上我们应该能够用 tag helpers.
替换 partial views除此之外,TagHelper
可以接受输入但 PartialView
不能。
我觉得对吗?还是误会?谁能解释清楚其中的区别?
提前致谢!
这是 asp.net 核心 2.1+
如果我对你的问题的理解正确,你可以用你自己的 TagHelpers 替换你所有的 HtmlHelper 部分视图,但你已经能够用 HtmlHelpers 做到这一点,所以这不是什么新鲜事。
但是,HtmlHelpers
、TagHelpers
和部分视图之间存在差异。
部分浏览量
局部视图是一个 Razor 标记文件 (.cshtml),它在另一个标记文件的呈现输出中呈现 HTML 输出。例如_partial.cshtml
.
HtmlHelper
HtmlHelpers 与 MVC 框架一起引入,以便能够呈现 html 服务器端。在剃须刀视图中通过 @
字符轻松区分。
@await Html.PartialAsync("_partial.cshtml", Model.Contact)
Beyond that, TagHelper can accept input but PartialView don't.
PartialAsync
中的第二个参数允许输入。
标签助手
使用 asp.net-core,TagHelpers 是另一种能够通过在 razor 视图中使用标签和属性来呈现服务器端 html 的方法。除了 html 友好的视图,它提供了较少的 html 抽象。在下面的代码中,我使用了部分 TagHelper,其中 name 属性定义了视图的路径或名称,for 属性分配将评估的模型表达式 (@Model)。这意味着您不需要使用 for="@Model.Contact"
而只需使用 for="Contact"
.
<partial name="_partial" for="Contact" />
您还可以使用 model 属性,它只是在实例化时将模型传递给局部视图。
<partial name="_partial" model='new Contact { Id = 1, Name = "Nick" }' />
从上面可以看出,TagHelpers和HtmlHelpers都可以渲染部分视图。
此外,如果您查看 HtmlHelperasp.net-core github
并将其与 TagHelper
进行比较两者实际上都在调用 IView.RenderAsync()
并传入包含部分视图的 ViewContext
。所以他们实际上在代码背后做同样的事情,除了它操纵 html.
旁注:
- 与 HtmlHelpers 非常相似,您也可以创建自己的 TagHelpers,它可以替换整个局部视图。
- TagHelpers 不是要取代 HtmlHelpers,而是提供替代方法。但是,在我看来 TagHelpers 更好。它们在 visual studio 编辑器中呈现得更好(由于 @HtmlHelpers,使用的 razor 页面有很多格式问题),更具可读性,并且符合 html.
- 在部分
TagHelper
中,您可以使用model
或for
向部分提供数据,但不能同时使用两者。 - 从名称中省略 .cshtml 只会强制框架在页面、视图和共享文件夹中搜索视图。它完全是可选的。
希望对您有所帮助