ASP.Net Core Blazor: как добавить другой файл css в _Host.cshtml на основе состояния сеанса user_id (защищенное хранилище браузера)

Я хотел бы добавить два разных файла CSS на основе user_id состояния сеанса в проект ASP.NET Core Blazor (серверный Blazor).

У меня есть два файла css для пользователя 1 и 2

Например:

  1. Если его пользователь 1 css site1 должен быть добавлен в _Host.cshtml.
  2. Если его пользователь 2, css site2 должен быть добавлен в _Host.cshtml.

И user_id = 1 и Userid = 2 в P

1.var user_id = await storage.GetAsync<int>("user"); 

это то, как User_id берется с использованием await async. Теперь необходимо взять user_id на _host.cshtml, чтобы

На _Host.cshtml

@if(user_id ==1)
{
<link href="css/site1.css" rel="stylesheet" />          
}
else if (user_id ==2)
{
<link href="css/site2.css" rel="stylesheet" /> 
}

Теперь я не могу использовать функцию (await storage.GetAsync (User_id);) на _host.cshtml

This is how a _Host.cshtml page looks

@page

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    <meta charset="utf-8" />
    <title>ProjectName</title>
    <link rel="icon" type="image/png" sizes="32x32" href="images/tenantA/favicons/favicon-32x32.png">
    <link rel="icon" type="image/png" sizes="16x16" href="images/tenantA/favicons/favicon-16x16.png">
</head>
<body class="something">
    <app>
        @(await Html.RenderComponentAsync<App>(RenderMode.Server))
    </app>

    <script src="_framework/blazor.server.js"></script>
    <link href="css/tenantA/site.css" rel="stylesheet" />
</body>
</html>

Теперь мне нужно получить user_id на cshtml, который ожидает вызова

    @page "/"
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

@if(User_id =="1")
{
    <link href="css/site1.css" rel="stylesheet" />          
    return;
}

<!DOCTYPE html>
<html lang="en">
<head>
....
...
..
.

Этот в настоящее время останавливает мой проект. Пожалуйста, помогите мне как можно скорее


person ijaz noufal    schedule 07.04.2021    source источник
comment
Удалите этот оператор return; из файла .cshtml, который вы показываете внизу. Затем переместите этот блок await storage.GetAsync<int>("user"); в начало файла _Host.cshtml в разделе @{} ниже @page. Получите идентификатор пользователя и используйте оператор if, который есть в <head>, чтобы загрузить правильный css.   -  person Cory Podojil    schedule 08.04.2021
comment
Спасибо, Кори за ответ. Я попробовал то же самое, но получил следующую внутреннюю ошибку сервера stackoverflow.com/questions/61438796/   -  person ijaz noufal    schedule 08.04.2021
comment
Я не уверен, как это будет работать. Страница _Host.cshtml - это страница запуска приложения Blazor. Это не приложение, поэтому у вас нет пользовательского контекста до запуска приложения. Что вам нужно сделать, так это загрузить Css после запуска приложения - см. Этот раздел статьи о том, как изменить информацию заголовка после запуска SPA - devblogs.microsoft.com/aspnet /   -  person MrC aka Shaun Curtis    schedule 09.04.2021
comment
Влияние на заголовок HTML в приложениях Blazor - будет ли это работать на dot net core 3.1 @MrC aka Shaun Curtis. Спасибо   -  person ijaz noufal    schedule 12.04.2021
comment
Большое спасибо @MrC aka Shaun Curtis, ваш ответ был действительно полезным. Это было почти то, в чем я нуждался. Но теперь, когда _host.cshtml загружается для каждой страницы Blazor, каждый раз, когда я перехожу на другую страницу за долю секунды, я вижу, что стиль переопределяется. Что не очень хорошо для клиента. Вы можете мне помочь в этом   -  person ijaz noufal    schedule 15.04.2021