Есть ли способ создать собственный элемент MVC Razor, например текст?

Я хочу создать собственный тег бритвы, например <text></text>, чтобы решить, что делать с html-кодом внутри него. Есть ли способ создать элементы бритвы, такие как элемент <text></text>, и добавить их в механизм бритвы?

Я не хочу создавать для этого HtmlHelpers.

Например:

<WYSYWIG>
Hello There!
</WYSYWIG>

or

<WeatherChart City="NY">
</WeatherChart>

Пояснение:

Ну, идея состоит в том, чтобы серверные теги были переведены (разобраны) в html-коды по заданным им атрибутам. Такие коды помогают младшим разработчикам не заморачиваться со сложностью элементов управления.


person Hirad Nikoo    schedule 15.10.2014    source источник
comment
Разве это не сделает HTML-разметку недействительной? Возможно, дополнительные разъяснения о том, хотите ли вы создать собственный HTML или использовать DisplayTemplate?   -  person CmdrTallen    schedule 15.10.2014
comment
Это настраиваемые HTML-теги. Я не понимаю, как это может иметь какое-либо отношение к движку Razor. Было бы полезнее, если бы вы могли объяснить, что именно вы хотите сделать.   -  person ataravati    schedule 15.10.2014
comment
meta.stackexchange.com/questions/66377/what -is-the-xy-problem (то есть, пожалуйста, расскажите нам, чего вы пытаетесь достичь!)   -  person DavidG    schedule 15.10.2014
comment
Ну, идея состоит в том, чтобы серверные теги были переведены в html-коды с помощью заданных им атрибутов. Такие коды помогают младшим разработчикам не заморачиваться со сложностью элементов управления.   -  person Hirad Nikoo    schedule 15.10.2014
comment
@HiradNikoo: Короче говоря, вам нужно реализовать свою собственную System.Web.Razor.dll (а затем и System.Web.Razor.Parser.HtmlMarkupParser)   -  person Brad Christie    schedule 15.10.2014
comment
@BradChristie: Ваш комментарий звучит как ответ. Не могли бы вы подробнее рассказать об этом как о блоке ответов, чтобы его можно было пометить как правильный ответ?   -  person Hirad Nikoo    schedule 16.10.2014
comment
Мне кажется, вы не понимаете, как буквально работает MVC, потому что вы использовали слово control как WebForms. элементы управления MVC являются шаблонами и не создаются с помощью тегов. Пожалуйста, прочтите блог Брэда Уилсона о Шаблоны. Создание шаблонов позволяет разработчикам серператов не знать, как отображать/редактировать значения.   -  person Erik Philips    schedule 21.07.2015
comment
@ErikPhilips Я не знаю, поняли ли вы мой вопрос или нет. Я думаю, что если вы посмотрите на другие ответы, вы сможете получить четкое представление о том, что было моим вопросом, и просто понизить оценку моего вопроса несправедливо. Мой вопрос был основан на том, что делает ‹text›‹/text› в движке бритвы. Пожалуйста, ответьте на вопрос, а не понижайте его оценку до нуля.   -  person Hirad Nikoo    schedule 14.08.2015


Ответы (2)


Самое близкое к тому, что вы описываете, - это создание шаблонов отображения или редактора. Затем вы можете определить шаблон для модели и использовать его с @Html.DisplayFor() в представлении.

Вот хороший пост в блоге, который поможет вам начать работу с aspnet. шаблоны отображения и редактора mvc и краткий обзор структуры ниже.

Пример

Модель - WeatherChartModel.cs

public class WeatherChartModel 
{
}

Шаблон отображения — WeatherChart.cshtml

<div class="weather-chart">
   // Some other stuff here
</div>

Представление — Index.cshtml

@model WeatherChartModel

@Html.DisplayForModel() // This will output the template view for the model
person Colin Bacon    schedule 15.10.2014
comment
Ага. это не то, что я имел в виду. Спасибо хоть. - person Hirad Nikoo; 15.10.2014

Чтобы создать пользовательскую обработку элементов в razor, например <text>, вам необходимо реализовать пользовательскую System.Web.Razor.dll (которая отвечает за синтаксический анализ документа). В частности, класс, который вы хотите повторно реализовать, будет System.Web.Razor.Parser.HtmlMarkupParser.

Однако я не считаю, что это необходимо, учитывая, насколько гибок сам фреймворк. Если вы хотите сохранить модульность, попробуйте использовать DisplayTemplates/EditorTemplates или рассмотрите возможность написания собственного метода расширения. Например, любое из следующего было бы более идеальным:

@* TextField is decorated with UIHint("WYSIWYG"), therefore
   calling ~/Views/Shared/EditorTemplates/WYSIWYG.cshtml *@
@Html.EditorFor(x => x.TextField)

@* WeatherField is decorated with UIHint("WeatherChart"), therefore
   calling ~/Views/Shared/DisplayTemplates/WeatherChart.cshtml *@
@Html.DisplayFor(x => x.WeatherField)

В качестве альтернативы:

@* Custom extension method *@
@Html.WysiwygFor(x => x.TextField)

@* Another custom extension method *@
@Html.WeatherChartFor(x => x.WeatherField)
person Brad Christie    schedule 16.10.2014