首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将html助手转换为.net核心

将html助手转换为.net核心
EN

Stack Overflow用户
提问于 2020-10-13 05:52:38
回答 1查看 291关注 0票数 0

在HTML4.6.2中,我有一个helper,如下所示:

代码语言:javascript
复制
public static MvcHtmlString JsMinify(this HtmlHelper helper, Func<object, object> markup, bool shouldMinify)
{
    string notMinifiedJs = (markup.DynamicInvoke(helper.ViewContext) ?? "").ToString();

    var minifier = new Minifier();
    var minifiedJs = minifier.MinifyJavaScript(notMinifiedJs, new CodeSettings
    {
        EvalTreatment = EvalTreatment.MakeImmediateSafe,
        PreserveImportantComments = false
    });
    return new MvcHtmlString(minifiedJs);
}

它是这样使用的:

代码语言:javascript
复制
@Html.JsMinify(@<text>
// some cool javascript here
</text>)

在.NET Core3.1中,我试图重新创建一个类似的助手:

代码语言:javascript
复制
public static IHtmlContent JsMinify(this IHtmlHelper helper, Func<object, object> markup)
{
    var resultTemplate = markup.DynamicInvoke(helper.ViewContext);
    var notMinifiedStr = (resultTemplate ?? string.Empty).ToString();
    var minifiedStr = Uglify.Js(notMinifiedStr, UglifyCodeSettings);
    return new HtmlString(minifiedStr.Code);
}

但是,它不能正常工作。调试这个,我可以看到notMinifiedStr值是一个字符串"Microsoft.AspNetCore.Mvc.Razor.HelperResult“,这是完全错误的。我不太确定.NET内核在这里有什么不同。

任何想法都值得赞赏。

EN

回答 1

Stack Overflow用户

发布于 2020-10-13 07:59:35

最后,我像这样使用了TagHelpers:

代码语言:javascript
复制
public class ScriptTagHelper : TagHelper
{
    private static readonly CodeSettings UglifyCodeSettings = new CodeSettings { PreserveImportantComments = false, EvalTreatment = EvalTreatment.MakeImmediateSafe, MinifyCode = true };

    public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
    {
        if (context == null)
        {
            throw new ArgumentNullException(nameof(context));
        }

        if (output == null)
        {
            throw new ArgumentNullException(nameof(output));
        }

        var js = (await output.GetChildContentAsync()).GetContent();

        if (!string.IsNullOrWhiteSpace(js))
        {
            var minifiedStr = Uglify.Js(js, UglifyCodeSettings);

            output.Content.SetHtmlContent(minifiedStr.Code);
        }
    }
}

然后简单地在我需要处理的cshtml文件的顶部添加这一行:

代码语言:javascript
复制
@addTagHelper *, InsertYourAssemblyNameHere
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64329323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档