2017-02-04 8 views

ответ

5

Для меня думал мои HTML помощники не работали, пока я не заметил, что метод расширения теперь IHtmlHelper не HtmlHelper.

Так .net ядра:

public static IHtmlContent CheckboxListFor<TModel>(this IHtmlHelper<TModel> html, 
      Expression<Func<TModel, List<CheckboxListItem>>> expression) ... 

Вместо для .net:

public static HtmlString CheckboxListFor<TModel>(this HtmlHelper<TModel> html, 
      Expression<Func<TModel, List<CheckboxListItem>>> expression) ... 

EDIT: Я также обновил тип возврата для .net ядра быть IHtmlContent как использование чего-то вроде HtmlContentBuilder - это лучший способ составить HTML-контент и Возвращение, которое возвращает IHtmlContent

+0

Не заметил этого различия в моей ошибке, должен был попробовать интерфейс. Благодаря! –

3

Это хорошо объяснено Дэнни ван дер Крааном в его blog post here. Ответ ниже - выдержка из этого сообщения:

ASP.NET Core 1.0 [MVC 6] поставляется с новой захватывающей функцией под названием TagHelpers. В ASP.Net Core 1.0 нет концепции HTML-помощника, как в MVC.

Что такое TagHelpers?

TagHelpers можно рассматривать как эволюцию HTML-помощников, которые были представлены с запуском первой основы MVC. Чтобы обеспечить контекст, вы должны представить, что с помощью классического ASP единственным способом автоматизации генерации HTML можно воспользоваться пользовательские подпрограммы. После этого ASP.NET поставляется с элементами управления сервером, с представлением о состоянии как самым большим плюсом, чтобы имитировать внешний вид настольных приложений и помочь с переходом для разработчиков настольных компьютеров. Но мы все знаем, что происходит, когда мы пытаемся зажать квадраты в круглые отверстия. Нам пришлось столкнуться с тем фактом, что веб-разработка ничем не отличается от разработки настольных систем. Чтобы получить соответствие с надлежащим веб-разработкой, инфраструктура ASP.NET MVC была запущена с помощью HTML-помощников для автоматизации вывода HTML. Но HTML-помощники никогда не заиливались, особенно не с разработчиками и дизайнерами. Одним из главных моментов для домашних животных было то, что он заставил вас переключиться с угловых кронштейнов (HTML, CSS) на C# (Razor syntax) во время работы над видами, что сделало опыт излишне неудобным. [MVC 6] хочет решить эту проблему и некоторые более мелкие проблемы, введя TagHelpers. Пример HTML помощник:

@Html.ActionLink(”Home”, ”Index”, ”Home”) 

С якорной TagHelper это будет выглядеть так:

<a asp-action="Index" asp-controller="Home">Home</a> 

PS:Пожалуйста, обратите внимание, что Asp- просто условность, но об этом позже.

Выход отображаются в браузере одинакова для обоих:

<a href="/">Home</a> 

PS:условии маршрут по умолчанию не был изменен.

Для получения дополнительной информации о TagHelpersclick here

+0

Я знаю, что TagHelpers - это новая функция Awesome, но мне нужно использовать помощник, похожий на @ Html.Raw, чтобы вставлять HTML на просмотр. Могу ли я сделать это с помощью TagHelpers? – Duefectu

+0

'TagHelper' - улучшенная функция' ASP.Net core'. Вы можете делать все, используя 'TagHelper'. Но вы точно пытаетесь объяснить несколько примеров? –

+1

Спасибо @Manish, я undestand TagHelpers и не нуждаюсь в HtmlHelpers. Я нашел хорошую документацию, которая разрешила моего чувака: [link] (https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/authoring) – Duefectu

19

HTML Помощники смотреть будет поддерживаться в ASP.NET Ядра и ожидают документации:

https://docs.microsoft.com/en-au/aspnet/core/mvc/views/html-helpers

Глядя на источник ASP.NET ядра они работают довольно аналогично более старым версиям ASP.NET MVC:

https://github.com/aspnet/Mvc/blob/dev/src/Microsoft.AspNetCore.Mvc.ViewFeatures/Rendering/HtmlHelperDisplayExtensions.cs


Пример

MyHTMLHelpers.cs:

using Microsoft.AspNetCore.Html; 
using Microsoft.AspNetCore.Mvc.Rendering; 
using System; 

namespace MyApp.Helpers 
{ 
    public static class MyHTMLHelpers 
    { 
     public static IHtmlContent HelloWorldHTMLString(this IHtmlHelper htmlHelper) 
      => new HtmlString("<strong>Hello World</strong>"); 

     public static String HelloWorldString(this IHtmlHelper htmlHelper) 
      => "<strong>Hello World</strong>"; 
    } 
} 

_ViewImports.cshtml (вторая линия является важным изменением):

@using MyApp 
@using MyApp.Helpers 
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 

MyView.cshtml:

<div>@Html.HelloWorldHTMLString()</div> 
<div>@Html.HelloWorldString()</div> 

Выходы:

привет мир

< сильный> Hello World </сильный>

+0

Хорошая новость, спасибо за обновление! – Duefectu

2

Я никогда не был в состоянии получить HtmlHelper методы расширения для работы, я всегда получал:

«IHtmlHelper» не содержит определение для «MethodName» и не метод расширения «MethodName» принимающую первый аргумент типа «IHtmlHelper» может быть найдено (вы пропали без вести с помощью директивы или сборки ссылка?)

Даже если я имел правильное пространство имен в моем _ViewImports.cshtml файл. Поэтому я решил использовать способность страниц Razor теперь поддерживать инъекционные услуги, которые были зарегистрированы для инъекций зависимостей. В качестве примера у меня есть необходимость вставить некоторые значения из моего файла конфигурации в файл _Layout.cshtml. Так что я сделал следующее:

1) Defined интерфейсу IConfigurationHelperService:

public interface IConfigurationHelperService 
{ 
    string GetApiUrl(); 
} 

2) Defined реализацию этого интерфейса в классе ConfigurationHelperSerivce (который сам по себе с помощью инъекции зависимостей, чтобы получить регулярную конфигурацию класс):

public class ConfigurationHelperService : IConfigurationHelperService 
{ 
    public ConfigurationHelperService(IConfiguration configuration) 
    { 
     Configuration = configuration; 
    } 

    private IConfiguration Configuration { get; } 

    public string GetApiUrl() 
    { 
     return GetConfigurationValue(ApiUrl); 
    } 

    private string GetConfigurationValue(string key) 
    { 
     var value = Configuration[key]; 
     if (value.IsNullOrEmpty()) throw new KeyNotFoundException($"Configruation does not contain an instance of {key}"); 
     return value; 
    } 
} 

3) Registered услуги для инъекции через ConfigureServices в Startup.cs:

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddSingleton<IConfigurationHelperService, ConfigurationHelperService>(); 
    services.AddMvc(); 
} 

4) Добавлено собственное пространство имен в качестве использующего оператора в файл _ViewImports.cshtml.

5) Использовал @Inject ключевое слово, чтобы определить его для использования в файле _Layout.cshtml.

@inject IConfigurationHelperService ConfigHelper 
<!DOCTYPE html> 
<html> 
... 
@ConfigHelper.GetApiUrl() 
... 
</html> 

Он работал большой для меня, и я могу видеть намного больше использует для этого на простых страницах, где определяющие модели было бы слишком много работы.

 Смежные вопросы

  • Нет связанных вопросов^_^