我肯定错过了blazor的一些非常明显的东西……我想简单地渲染一个包含组件的列表,但是没有(显而易见的?)方法来引用迭代器(作为组件)进行渲染吗?
TodoList.razor
<input @bind="_newTodo" />
<button @onclick="@AddTodoItem">+</button>
@foreach (TodoItem todoItem in _todoItems)
{
// todoItem is a razor component, yet I can't simply render it here?
// <todoItem />
}
@code {
private IList<TodoItem> _todoItems = new List<TodoItem>();
private string _newTodo;
private void AddTodoItem()
{
if (!string.IsNullOrWhiteSpace(_newTodo))
{
_todoItems.Add(new TodoItem { Title = _newTodo });
_newTodo = string.Empty;
}
}
}
TodoItem.razor
<span>@Title</span>
@code {
public string Title { get; set; }
}
答案 0 :(得分:3)
在React中,这是非常简单的事情,并且可以像您刚才那样工作,但是在Blazor中,我认为您无法以尝试的方式来做到这一点。
一种解决方案是拥有一个类,该类保存组件属性并将属性传递给它。
<input @bind="_newTodo" />
<button @onclick="@AddTodoItem">+</button>
@foreach (TodoItem todoItem in _todoItemsDto)
{
// Pass the Dto properties to the component
<TodoItem Title="@todoItem.Title" />
}
@code {
private IList<TodoItemDto> _todoItemsDto = new List<TodoItemDto>();
private string _newTodo;
class TodoItemDto {
public string Title { get; set; }
}
private void AddTodoItem()
{
if (!string.IsNullOrWhiteSpace(_newTodo))
{
_todoItems.Add(new TodoItemDto { Title = _newTodo });
_newTodo = string.Empty;
}
}
}
答案 1 :(得分:0)
我刚刚构建了一个具有LinkButton组件的帮助系统,并且我将其呈现为:
foreach (HelpCategory category in Categories)
{
<LinkButton Category=category Parent=this></LinkButton>
<br />
}
每个HelpCategory都有一个或多个可以扩展的帮助文章。
这是我的LinkButton的代码,它的功能更多:
@using DataJuggler.UltimateHelper.Core
@using ObjectLibrary.BusinessObjects
@if (HasCategory)
{
<button class="linkbutton"
@onclick="SelectCategory">@Category.Name</button>
@if (Selected)
{
<div class="categorydetail">
@Category.Description
</div>
<br />
<div class="margintop">
@if (ListHelper.HasOneOrMoreItems(Category.HelpArticles))
{
foreach (HelpArticle article in Category.HelpArticles)
{
<ArticleViewer HelpArticle=article Parent=this>
</ArticleViewer>
<br />
<div class="smallline"></div>
}
}
</div>
}
}