#c# #mongodb #blazor #blazor-server-side
Вопрос:
Я создаю приложение Blazor на основе BlazorSQLandMongoDb
Используя данные примера здесь Введение в MongoDB
Моя .бритва:
<MudTable Items="structuredDatas" Hover="true" Breakpoint="Breakpoint.Sm">
<HeaderContent>
<MudTh>Name</MudTh>
<MudTh>Qty</MudTh>
<MudTh>Rating</MudTh>
<MudTh>Edit</MudTh>
<MudTh>Delete</MudTh>
</HeaderContent>
<RowTemplate>
<MudTd DataLabel="name">@context.Name</MudTd>
<MudTd DataLabel="qty">@context.Qty</MudTd>
<MudTd DataLabel="score">
@foreach (var rating in context.Ratings)
{
<div>@rating.Score</div>
}
</MudTd>
</RowTemplate>
</MudTable>
Это работает до тех пор, пока каждая запись соответствует схеме (то есть содержит все поля документа) и каждое поле не является пустым или пустым.
- Как заставить его возвращать все запрошенные поля записи и игнорировать незапрошенные поля, даже если запись точно не соответствует схеме?
- Как заставить его возвращать запись, даже если поле пустое/пустое?
Это будет иметь решающее значение, если мне потребуется пересмотреть или добавить схему позже.
Обновить
Я обновил свой код с [BsonIgnoreExtraElements]
помощью декоратора. Это работает, если я удаляю любое поле, кроме рейтингов, которое содержит список. (например "Ratings": [ { "score": 8 }, { "score": 9 } ]
)
[BsonIgnoreExtraElements]
public class StructuredData
{
public string Id { get; set; }
public string Name { get; set; }
public int Qty { get; set; }
public List<Rating> Ratings { get; set; }
}
public class Rating
{
public int Score { get; set; }
}
Страница загружается, но таблицы нет, если я сниму рейтинг. Все еще не разобрался в этой части.
Ответ №1:
Решена последняя проблема с:
<MudTd DataLabel="Score">
@if (context.Ratings != null)
{
@foreach (var rating in context.Ratings)
{
<div>@rating.Score</div>
}
}
</MudTd>
Что также может решить первую проблему…