我试图让 ServiceStack.Razor 和htmltags一起玩得很好。看起来我需要TemplateBase在写出页面时检查 IHtmlString。下面的代码有效(并从MvcHtmlString/DynamicMvcHtmlString中获取线索),但这似乎不是一个很好的解决方案,因为每次写入都会发生反射。
有任何想法吗?
/// <summary>
/// Writes the specified object to the template result.
/// </summary>
/// <param name="object">The object to write.</param>
public void Write(object @object)
{
if (@object == null)
return;
if (@object is MvcHtmlString)
{
Builder.Append(@object);
}
else if (typeof (HttpContext).Assembly.GetType("System.Web.IHtmlString") != null && (typeof (HttpContext).Assembly.GetType("System.Web.IHtmlString")).IsInstanceOfType(@object))
{
Builder.Append(@object);
}
else
{
var strValue = Convert.ToString(@object);
Builder.Append(HttpUtility.HtmlEncode(strValue));
}
}
我当前的解决方法是将 html 包装在新的 MvcHtmlString
public static MvcHtmlString ToMvcHtmlString(this HtmlTag htmlTag)
{
return MvcHtmlString.Create(htmlTag.ToHtmlString());
}