Эквивалент MvcHtmlString в.Net 3.5 и ниже?
Есть ли эквивалентный метод для MvcHtmlString в.Net 3.5 и ниже? Я погуглил и не нашел ответа. Я создал помощник для MVC 3/.NET 4, который использует MvcHtmlString. Однако он работает только в.NET 4. Я хочу закодировать версию помощника, чтобы он мог работать в Mvc 2/.net 3.5, чтобы я мог использовать помощник в другом проекте, который использует эту среду выполнения. Буду ли я просто использовать stringbuilder и вернуть Stringbuilder.ToString?
1 ответ
MvcHtmlString
работает как на.NET 3.5, так и.NET 4 - имеет статический Create()
метод, который следует использовать для создания нового экземпляра.
Причиной статического фабричного метода является то, что проверка времени выполнения может использоваться для определения того, является ли среда.NET 4 или.NET 3.5; если среда -.NET 4, то во время выполнения объявляется новый тип, производный от MvcHtmlString и реализующий IHtmlString
так что новый <%: %>
ответная запись с синтаксисом кодировки работает.
Исходный код для этого выглядит так (взят из исходного кода MVC 2)
// in .NET 4, we dynamically create a type that subclasses MvcHtmlString and implements IHtmlString
private static MvcHtmlStringCreator GetCreator()
{
Type iHtmlStringType = typeof(HttpContext).Assembly.GetType("System.Web.IHtmlString");
if (iHtmlStringType != null)
{
// first, create the dynamic type
Type dynamicType = DynamicTypeGenerator.GenerateType("DynamicMvcHtmlString", typeof(MvcHtmlString), new Type[] { iHtmlStringType });
// then, create the delegate to instantiate the dynamic type
ParameterExpression valueParamExpr = Expression.Parameter(typeof(string), "value");
NewExpression newObjExpr = Expression.New(dynamicType.GetConstructor(new Type[] { typeof(string) }), valueParamExpr);
Expression<MvcHtmlStringCreator> lambdaExpr = Expression.Lambda<MvcHtmlStringCreator>(newObjExpr, valueParamExpr);
return lambdaExpr.Compile();
}
else
{
// disabling 0618 allows us to call the MvcHtmlString() constructor
#pragma warning disable 0618
return value => new MvcHtmlString(value);
#pragma warning restore 0618
}
}