Я создаю приложение Blazor для рендеринга на стороне сервера.
В Program.cs у меня есть
builder
.Services
.AddRazorComponents()
.AddInteractiveServerComponents();
и
app.MapRazorComponents<App>()
.AddInteractiveServerRenderMode();
В компоненте у меня есть что-то вроде этого, которое не работает, и я хотел бы отладить этот код с точками останова, но не нахожу способа его отладки.
@using System.Globalization
@inject IJSRuntime JSRuntime
@inject NavigationManager Nav
<select class = "form-control" @onchange = "ChangeLanguage">
@foreach (var language in supportedLanguages)
{
<option value = "@language">@language.DisplayName</option>
}
</select>
@code
{
CultureInfo[] supportedLanguages = new[]
{
new CultureInfo("en-US"),
new CultureInfo("pt-PT"),
new CultureInfo("fr-FR"),
};
private async Task ChangeLanguage(ChangeEventArgs e)
{
var culture = e.Value?.ToString();
Console.WriteLine("culture is " + culture);
if (!string.IsNullOrEmpty(culture))
{
await JSRuntime.InvokeVoidAsync("BlazorCulture.setCulture", culture);
}
}
}
После поиска и поскольку я использую .NET 8, единственное, что позволяет серверной стороне отладки, - это использовать следующий код в app.razor файле:
<script src = "_framework/blazor.server.js" autostart = "false"></script>
<script>
Blazor.start({
configureSignalR: function (builder) {
builder.withUrl("/_blazor", {
skipNegotiation: true,
transport: 1
});
}
});
</script>
Привет @JasonPan У меня это есть в Program.cs, и когда я помещаю отладку в этот блок кода, я не могу отладить. Вероятно, в моей VS IDE чего-то не хватает.





Мы можем отладить его, добавив @rendermode InteractiveServer.
@page "/test"
@using System.Globalization
@inject IJSRuntime JSRuntime
@inject NavigationManager Nav
@rendermode InteractiveServer
<select class = "form-control" @onchange = "OnChangeLanguage">
@foreach (var language in supportedLanguages)
{
<option value = "@language">@language.DisplayName</option>
}
</select>
@code
{
CultureInfo[] supportedLanguages = new[]
{
new CultureInfo("en-US"),
new CultureInfo("pt-PT"),
new CultureInfo("fr-FR"),
};
private async Task OnChangeLanguage(ChangeEventArgs e)
{
var culture = e.Value?.ToString();
Console.WriteLine("culture is " + culture);
if (!string.IsNullOrEmpty(culture))
{
await JSRuntime.InvokeVoidAsync("BlazorCulture.setCulture", culture);
}
}
}
Привет @JasonPan! Когда я запускаю, кажется, единственное, что происходит, это когда я запускаю приложение, то, что находится за пределами метода OnChangeLanguage. Какую настройку мне нужно сделать, чтобы он также работал с этими функциями?
Это работает и требуется, а также то, что я упоминаю в сделанной мной правке. Я использую версию .NET8.
У меня была такая же проблема. Visual Studio не установила точку останова. Добавление @rendermode InteractiveServer не решило проблему.
Но перемещение кода из @code{...} в отдельный файл cs решает проблему.
Это может сработать, я нашел другое решение и отредактировал свой вопрос.
Могу ли я узнать, есть ли у вас возможность проверить решение ниже? Если вам нужна дополнительная помощь, пожалуйста, дайте мне знать, хорошего дня.