我想创建一个自定义的剃刀标记,如<text></text>
,以决定如何处理其中的html代码。有没有办法创建像<text></text>
元素这样的剃刀元素并将其添加到剃刀引擎中?
我不想为此创建任何HtmlHelper。
对于考试:
<WYSYWIG>
Hello There!
</WYSYWIG>
或
<WeatherChart City="NY">
</WeatherChart>
解释
好的想法是通过给定的属性将服务器标签翻译(解析)为html代码。这种代码有助于初级开发人员不要参与控制的复杂性。
答案 0 :(得分:1)
与您描述的最接近的是创建显示或编辑器模板。然后,您可以为模型定义模板,并在视图中将其与@Html.DisplayFor()
一起使用。
这是一篇很好的博文,旨在帮助您入门aspnet mvc display and editor templates,并快速概述下面的结构。
示例强>
public class WeatherChartModel
{
}
<div class="weather-chart">
// Some other stuff here
</div>
@model WeatherChartModel
@Html.DisplayForModel() // This will output the template view for the model
答案 1 :(得分:0)
为了在剃刀中创建自定义元素处理,例如<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)