MvcHtmlString等价于.net 3.5及更低版本



在。net 3.5和更低版本中是否有与MvcHtmlString等效的方法?我用谷歌搜索了一下,还没有找到答案。我为MVC 3/创建了一个助手。使用MvcHtmlString的。NET 4。然而,它只运行在。net 4上。我想编写一个版本的helper,这样它就可以在Mvc 2/.net 3.5上运行,这样我就可以在另一个使用此运行时的项目上使用helper。我只是使用stringbuilder并返回stringbuilder . tostring吗?

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
    }
}

相关内容

  • 没有找到相关文章

最新更新