我們正在構建一個類庫,爲視圖模型提供某些結構化類型,例如, 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完全被忽略。
我在尋找任何提示如何從類庫中爲給定的類提供默認的顯示模板,只需將標準顯示模板放置到視圖文件夾即可重寫。