在ASP.NET Core 2.x中,我使用GetExpressionText类的静态方法ExpressionHelper作为IHtmlHelper<T>扩展方法:

using Microsoft.AspNetCore.Mvc.ViewFeatures.Internal;

public static class HtmlHelperExtensions
{
    public static string GetExpressionText<TModel, TResult>(
        this IHtmlHelper<TModel> htmlHelper,
        Expression<Func<TModel, TResult>> expression)
    {
        return ExpressionHelper.GetExpressionText(expression);
    }
}

在ASP.NET Core 3.0中,命名空间Microsoft.AspNetCore.Mvc.ViewFeatures.Internal不再可用。因此,编译器将引发异常:



什么是ExpressionHelper功能的适当替代品?

最佳答案

可以使用ModelExpressionProvider中的Microsoft.AspNetCore.Mvc.ViewFeatures

方法GetExpressionText包装了ExpressionHelper的相同方法,并添加了此Github issue中描述的其他缓存或结果。

using Microsoft.AspNetCore.Mvc.ViewFeatures;

public static class HtmlHelperExtensions
{
    public static string GetExpressionText<TModel, TResult>(
        this IHtmlHelper<TModel> htmlHelper,
        Expression<Func<TModel, TResult>> expression)
    {
        var expresionProvider = htmlHelper.ViewContext.HttpContext.RequestServices
            .GetService(typeof(ModelExpressionProvider)) as ModelExpressionProvider;

        return expresionProvider.GetExpressionText(expression);
    }
}

关于c# - 是否可以替换ASP.NET Core 3.0中的ExpressionHelper?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57821737/

10-13 06:53