Можно ли заменить PartialViews на TagHelpers в ASP.NET Core? - PullRequest
0 голосов
/ 11 ноября 2018

Я новичок в ASP.NET Core. Я только что открыл TagHelpers, и, как я понял, теоретически мы должны заменить частичные представления помощниками тегов .

Кроме того, TagHelper может принимать ввод, но PartialView - нет.

я думаю правильно? или это недоразумение? кто-нибудь может объяснить разницу четко?

Заранее спасибо!

1 Ответ

0 голосов
/ 12 ноября 2018

Это для ядра asp.net 2.1 +

Если я правильно понимаю ваш вопрос, вы можете заменить все ваши частичные представления HtmlHelper вашими собственными TagHelpers, но вы уже смогли сделать это с 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-core TagHelpers - это еще один способ отобразить html на стороне сервера, используя теги и атрибуты в бритвенных представлениях. Помимо html дружественных представлений, он обеспечивает меньшую абстракцию от html. В приведенном ниже коде я использую Partial 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 могут отображать частичные представления.

Кроме того, если вы посмотрите на gitub asp.net-core для 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 вы можете использовать либо model, либо for для предоставления данных частичному, но не оба одновременно.
  • Пропуск .cshtml из имени просто заставит каркас искать вид в папках Pages, Views и Shared. Это совершенно необязательно.

Надеюсь, это поможет

...