0

.Net 3.5以下のMvcHtmlStringと同等のメソッドはありますか?私はグーグルで答えを見つけられませんでした。MvcHtmlStringを使用するMVC3/.NET4のヘルパーを作成しました。ただし、.NET 4でのみ実行されます。ヘルパーのバージョンをコーディングして、Mvc 2 / .net 3.5で実行できるようにし、このランタイムを使用する別のプロジェクトでヘルパーを使用できるようにします。stringbuilderを使用してStringbuilder.ToStringを返しますか?

4

1 に答える 1

3

MvcHtmlString.NET3.5と.NET4の両方で機能します-Create()新しいインスタンスを作成するために使用する必要がある静的メソッドがあります。

静的ファクトリメソッドの理由は、実行時検査を使用して、環境が.NET4または.NET3.5のどちらであるかを判断できるようにするためです。環境が.NET4の場合、実行時に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
    }
}
于 2011-12-20T07:55:46.273 に答える