ff8mania
ff8mania

Reputation: 1770

RazorEngine: cannot use Html.Raw

using RazorEngine outside asp.net I'm experiencing this error when I try to write raw html by using @Html.Raw("html string here"):

Unable to compile template. The name 'Html' does not exist in the current context

Can you help me?

Thanks!

Upvotes: 28

Views: 12912

Answers (4)

Mark Smith
Mark Smith

Reputation: 134

I had a similar problem with RazorLight not being able to handle @Html.Raw calls in partial views. I just made a Utility class with a Raw method and used that instead.

public static IHtmlContent Raw(string? str)
    {
        return new HtmlString(str);
    }

This works because my namespace is already being injected into the RazorLight engine.

private RazorLightEngine engine = new RazorLightEngineBuilder()
        .UseFileSystemProject(Directory.GetCurrentDirectory().ToString())
        .AddDefaultNamespaces("MyCoolProject.Models")
        .UseMemoryCachingProvider()
        .Build();

Then replace @Html.Raw(Model.HtmlString) with @Utility.Raw(Model.HtmlString) and you're ducky.

Upvotes: 0

Rider Harrison
Rider Harrison

Reputation: 571

In my case my _ViewImports.cshtml file was missing a reference to:

@using Microsoft.AspNetCore.Mvc;

Once I added this ff8mania's answer worked for me.

Upvotes: 2

Brian Rice
Brian Rice

Reputation: 3257

I implemented my own Raw whose result implements both IHtmlString and IEncodedString... and it worked! :)

In my csthml:
@MyRazorParser.Raw("<b>Testing</b>")

This works both when MVC uses it and when the RazorEngine parser uses it.

public class MyRawResult : RazorEngine.Text.IEncodedString, System.Web.IHtmlString
{
    public string Value;
    public MyRawResult(string value) { Value = value; }
    public string ToEncodedString()
    {
        return Value;
    }

    public string ToHtmlString()
    {
        return Value;
    }

    public override string ToString()
    {
        return Value;
    }
}

public static class MyRazorParser
{
    public static object Raw(string str)
    {
        return new MyRawResult(str);
    }
}

Upvotes: 6

ff8mania
ff8mania

Reputation: 1770

The solution has been found here: https://github.com/Antaris/RazorEngine/issues/34

It's enough to use @(new RawString("html string here")) or @Raw("html string here") instead of @Html.Raw("html string here").

I hope this helps! Bye

Upvotes: 31

Related Questions