我们正在构建一个类库,为视图模型提供某些结构化类型,例如, InlineImage。类DisplayTemplate的默认输出
我需要能够定义默认HTML输出,这样的实例与@ Html.DisplayFor(...),基本上使用时...
- 当/Views/DisplayTemplates/InlineImage.cshtml是可用,然后使用该模板
- 时不可用,它应该输出默认
但是......
- 当我仅仅重载的ToString该类的(),它给了我正确的输出,但它可以让HTML编码
我发现了分析,我能够禁用编码MVC源代码中添加[DisplayFormat(的HTMLEncode = false)]给CLASS
但是...该属性并不是以类为目标的,所以我通过将它包装到我添加到类中的另一个属性来入侵它。这是讨厌的,但至少工作:)
我的代码目前看起来是这样的:
[AttributeUsage(AttributeTargets.Class)]
class DisableHtmlEncodeAttribute : DisplayFormatAttribute
{
public DisableHtmlEncodeAttribute()
{
HtmlEncode = false;
}
}
[DisableHtmlEncode]
internal class InlineImage : IInlineImage
{
public string AltText { get; set; }
public string Src { get; set; }
public override string ToString()
{
return $"<figure><img src=\"{Src}\" alt=\"{AltText}\"></figure>";
}
}
它为默认的显示,但是当文件系统提供了显示模板,不使用它。可能是因为这些数据注释导致了某些事物的切割。
我已经尝试过其他几种方法与此类似:
- 使用第一属性与HTML数据注解
- 使用display属性与HTML数据注解
- 实施IHtmlString
但该框架似乎只为类本身检查元数据,但不检查其在此情况下的属性。而IHtmlString完全被忽略。
我在寻找任何提示如何从类库中为给定的类提供默认的显示模板,只需将标准显示模板放置到视图文件夹即可重写。