« Blazor ASP.NET Core 7.0 » : différence entre les versions
De Banane Atomic
Aller à la navigationAller à la recherche
(→Pages) |
|||
Ligne 22 : | Ligne 22 : | ||
* [https://learn.microsoft.com/en-us/aspnet/core/blazor/fundamentals/routing?view=aspnetcore-7.0#route-parameters Route parameters] | * [https://learn.microsoft.com/en-us/aspnet/core/blazor/fundamentals/routing?view=aspnetcore-7.0#route-parameters Route parameters] | ||
* [https://learn.microsoft.com/en-us/aspnet/core/blazor/fundamentals/routing?view=aspnetcore-7.0#route-constraints Route constraints] | * [https://learn.microsoft.com/en-us/aspnet/core/blazor/fundamentals/routing?view=aspnetcore-7.0#route-constraints Route constraints] | ||
= [https://learn.microsoft.com/en-us/aspnet/core/blazor/forms-and-input-components?view=aspnetcore-7.0 Form] = | |||
<filebox fn='EditItem.razor'> | |||
@page "/edititem/{ItemId:int}" | |||
<EditForm Model="@item" | |||
OnValidSubmit="@HandleValidSubmitAsync" | |||
OnInvalidSubmit="@HandleInvalidSubmitAsync"> | |||
<button type="submit">Save</button> | |||
<button @onclick="Cancel">Cancel</button> | |||
</EditForm> | |||
</filebox> | |||
<filebox fn='EditItem.razor.cs'> | |||
[Parameter] | |||
public int ItemId { get; set; } | |||
[Inject] | |||
private IItemService ItemService { get; set; } | |||
private Item item = null; | |||
protected override async Task OnInitializedAsync() | |||
{ | |||
item = await ItemDataService.GetItemAsync(ItemId); | |||
} | |||
// when the submit button is clicked and the model is valid | |||
private async Task HandleValidSubmitAsync() | |||
{ | |||
await ItemService.UpdateItemAsync(item); | |||
} | |||
// when the submit button is clicked and the model is not valid | |||
private async Task HandleInvalidSubmitAsync() { } | |||
</filebox> | |||
== [https://github.com/dotnet/aspnetcore/blob/master/src/Components/Web/src/Forms/InputText.cs Input Text] == | |||
<kode lang='razor'> | |||
<div class="form-group row"> | |||
<label for="name" | |||
class="col-sm-3"> | |||
Item: | |||
</label> | |||
<InputText id="name" | |||
@bind-Value="Item.Name" | |||
class="form-control col-sm-8" | |||
placeholder="Enter name"> | |||
</InputText> | |||
</div> | |||
</kode> | |||
= [https://learn.microsoft.com/en-us/aspnet/core/blazor/blazor-server-ef-core?view=aspnetcore-7.0 Entity Framework Core] = | = [https://learn.microsoft.com/en-us/aspnet/core/blazor/blazor-server-ef-core?view=aspnetcore-7.0 Entity Framework Core] = |
Version du 28 mars 2023 à 11:57
Pages
Pages/Items.razor |
@page "/items" @* url *@ @page "/item/{id:int}" @* url avec un parameter *@ @if (Items == null) @* attendre que la valeur soit chargée *@ { <p><em>Loading...</em></p> } else { /* ... */ } |
Pages/Items.razor.cs |
public partial class Table : ComponentBase { [Parameter] public int Id { get; set; } |
Form
EditItem.razor |
@page "/edititem/{ItemId:int}" <EditForm Model="@item" OnValidSubmit="@HandleValidSubmitAsync" OnInvalidSubmit="@HandleInvalidSubmitAsync"> <button type="submit">Save</button> <button @onclick="Cancel">Cancel</button> </EditForm> |
EditItem.razor.cs |
[Parameter] public int ItemId { get; set; } [Inject] private IItemService ItemService { get; set; } private Item item = null; protected override async Task OnInitializedAsync() { item = await ItemDataService.GetItemAsync(ItemId); } // when the submit button is clicked and the model is valid private async Task HandleValidSubmitAsync() { await ItemService.UpdateItemAsync(item); } // when the submit button is clicked and the model is not valid private async Task HandleInvalidSubmitAsync() { } |
Input Text
<div class="form-group row"> <label for="name" class="col-sm-3"> Item: </label> <InputText id="name" @bind-Value="Item.Name" class="form-control col-sm-8" placeholder="Enter name"> </InputText> </div> |
Entity Framework Core
Using a DbContext factory
DbContext isn't thread safe and isn't designed for concurrent use.
To handle multi-threads scenarios, use a AddDbContextFactory to create a DbContext for each query.
Program.cs |
builder.Services.AddDbContextFactory<MyDbContext>(); |
MyRepository.cs |
private readonly IDbContextFactory<MyDbContext> contextFactory; public DataSummaryRepository(IDbContextFactory<MyDbContext> contextFactory) { this.contextFactory = contextFactory; } public async Task<Data> FetchDataAsync() { // create a DbContext for this query, then dispose it once the query has been executed using var context = contextFactory.CreateDbContext(); } |