Skip to content

Commit 052119e

Browse files
authored
Rendering components in RP/MVC updates (#17571)
1 parent b5b6f87 commit 052119e

2 files changed

Lines changed: 89 additions & 2 deletions

File tree

aspnetcore/blazor/integrate-components.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ description: Learn about data binding scenarios for components and DOM elements
55
monikerRange: '>= aspnetcore-3.1'
66
ms.author: riande
77
ms.custom: mvc
8-
ms.date: 03/17/2020
8+
ms.date: 04/01/2020
99
no-loc: [Blazor, SignalR]
1010
uid: blazor/integrate-components
1111
---
@@ -105,6 +105,19 @@ To support routable Razor components in Razor Pages apps:
105105

106106
Components use the shared *_Layout.cshtml* file for their layout.
107107

108+
<xref:Microsoft.AspNetCore.Mvc.Rendering.RenderMode> configures whether the `App` component:
109+
110+
* Is prerendered into the page.
111+
* Is rendered as static HTML on the page or if it includes the necessary information to bootstrap a Blazor app from the user agent.
112+
113+
| Render Mode | Description |
114+
| ----------- | ----------- |
115+
| <xref:Microsoft.AspNetCore.Mvc.Rendering.RenderMode.ServerPrerendered> | Renders the `App` component into static HTML and includes a marker for a Blazor Server app. When the user-agent starts, this marker is used to bootstrap a Blazor app. |
116+
| <xref:Microsoft.AspNetCore.Mvc.Rendering.RenderMode.Server> | Renders a marker for a Blazor Server app. Output from the `App` component isn't included. When the user-agent starts, this marker is used to bootstrap a Blazor app. |
117+
| <xref:Microsoft.AspNetCore.Mvc.Rendering.RenderMode.Static> | Renders the `App` component into static HTML. |
118+
119+
For more information on the Component Tag Helper, see <xref:mvc/views/tag-helpers/builtin-th/component-tag-helper>.
120+
108121
1. Add a low-priority route for the *_Host.cshtml* page to endpoint configuration in `Startup.Configure`:
109122

110123
```csharp

aspnetcore/mvc/views/tag-helpers/built-in/component-tag-helper.md

Lines changed: 75 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ author: guardrex
44
ms.author: riande
55
description: Learn how to use the ASP.NET Core Component Tag Helper to render Razor components in pages and views.
66
ms.custom: mvc
7-
ms.date: 03/18/2020
7+
ms.date: 04/01/2020
88
no-loc: [Blazor, SignalR]
99
uid: mvc/views/tag-helpers/builtin-th/component-tag-helper
1010
---
@@ -14,12 +14,25 @@ By [Daniel Roth](https://github.com/danroth27) and [Luke Latham](https://github.
1414

1515
To render a component from a page or view, use the [Component Tag Helper](xref:Microsoft.AspNetCore.Mvc.TagHelpers.ComponentTagHelper).
1616

17+
## Prerequisites
18+
19+
Follow the guidance in the *Prepare the app to use components in pages and views* section of the <xref:blazor/integrate-components#prepare-the-app-to-use-components-in-pages-and-views> article.
20+
21+
## Component Tag Helper
22+
1723
The following Component Tag Helper renders the `Counter` component in a page or view:
1824

1925
```cshtml
26+
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
27+
@using {APP ASSEMBLY}.Pages
28+
29+
...
30+
2031
<component type="typeof(Counter)" render-mode="ServerPrerendered" />
2132
```
2233

34+
The preceding example assumes that the `Counter` component is in the app's *Pages* folder.
35+
2336
The Component Tag Helper can also pass parameters to components. Consider the following `ColorfulCheckbox` component that sets the check box label's color and size:
2437

2538
```razor
@@ -51,10 +64,17 @@ The Component Tag Helper can also pass parameters to components. Consider the fo
5164
The `Size` (`int`) and `Color` (`string`) [component parameters](xref:blazor/components#component-parameters) can be set by the Component Tag Helper:
5265

5366
```cshtml
67+
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
68+
@using {APP ASSEMBLY}.Shared
69+
70+
...
71+
5472
<component type="typeof(ColorfulCheckbox)" render-mode="ServerPrerendered"
5573
param-Size="14" param-Color="@("blue")" />
5674
```
5775

76+
The preceding example assumes that the `ColorfulCheckbox` component is in the app's *Shared* folder.
77+
5878
The following HTML is rendered in the page or view:
5979

6080
```html
@@ -68,6 +88,60 @@ Passing a quoted string requires an [explicit Razor expression](xref:mvc/views/r
6888

6989
The parameter type must be JSON serializable, which typically means that the type must have a default constructor and settable properties. For example, you can specify a value for `Size` and `Color` in the preceding example because the types of `Size` and `Color` are primitive types (`int` and `string`), which are supported by the JSON serializer.
7090

91+
In the following example, a class object is passed to the component:
92+
93+
*MyClass.cs*:
94+
95+
```csharp
96+
public class MyClass
97+
{
98+
public MyClass()
99+
{
100+
}
101+
102+
public int MyInt { get; set; } = 999;
103+
public string MyString { get; set; } = "Initial value";
104+
}
105+
```
106+
107+
**The class must have a public parameterless constructor.**
108+
109+
*Shared/MyComponent.razor*:
110+
111+
```razor
112+
<h2>MyComponent</h2>
113+
114+
<p>Int: @MyObject.MyInt</p>
115+
<p>String: @MyObject.MyString</p>
116+
117+
@code
118+
{
119+
[Parameter]
120+
public MyClass MyObject { get; set; }
121+
}
122+
```
123+
124+
*Pages/MyPage.cshtml*:
125+
126+
```cshtml
127+
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
128+
@using {APP ASSEMBLY}
129+
@using {APP ASSEMBLY}.Shared
130+
131+
...
132+
133+
@{
134+
var myObject = new MyClass();
135+
myObject.MyInt = 7;
136+
myObject.MyString = "Set by MyPage";
137+
}
138+
139+
<component type="typeof(MyComponent)" render-mode="ServerPrerendered"
140+
param-MyObject="@myObject" />
141+
```
142+
143+
The preceding example assumes that the `MyComponent` component is in the app's *Shared* folder. `MyClass` is in the app's namespace (`{APP ASSEMBLY}`).
144+
71145
<xref:Microsoft.AspNetCore.Mvc.Rendering.RenderMode> configures whether the component:
72146

73147
* Is prerendered into the page.

0 commit comments

Comments
 (0)