Skip to content

Latest commit

 

History

History
66 lines (53 loc) · 2.15 KB

Templater.md

File metadata and controls

66 lines (53 loc) · 2.15 KB

Templater

The Templater class renders the component. It is superceded by ComponentRenderer but is used by this, and retained for backward compatibility. It also supports a non-generic RenderComponent method so is able to render from a Type provided that type implements IComponent.

var templater = new Templater();
var html = templater.RenderComponent<MyComponent>();

This renders the MyComponent component as HTML.

** Non-Generic method **

The Templater from v1.4.1 supports a non-generic RenderComponent() overload using the type of a component.

var componentType = typeof(MyComponent);
var templater = new Templater();
var html = templater.RenderComponent(componentType);

This feature was added as it enables the option to create static websites from a set of RazorComponents using reflection. See #15

Parameters

You can also set parameters on a component, e.g.

var templater = new Templater();
var myModel = new Model() { Value = "test" };
var parameters = new Dictionary<string, object>()
    {
        { nameof(MyComponent.Model), myModel }
    };
var html = templater.RenderComponent<MyComponent>(parameters);

The dictionary is used to pass parameter values the component by name. Using nameof() instead of hard-coding a string is recommended to avoid code changes causing errors.

Dependency Injection

You can also use dependency injection:

var templater = new Templater();
templater.AddService<ITestService>(new TestService());
var html = templater.RenderComponent<MyComponent>();

Layouts New!

If a top-level component has a @layout attribute it will be applied when the component is rendered.

Alternatively you can apply a template explicitly:

var templater = new Templater();
templater..UseLayout<MyLayout>();
var html = templater.RenderComponent<MyComponent>();

You can also specify via a type:

void Example(Type layout)
{
    var templater = new Templater();
    templater..UseLayout(layout);
    var html = templater.RenderComponent<MyComponent>();
}

See Layouts for more information.