标签: blazor-server-side

AutoMapper:CreateMap 和 CreateProjection 有什么区别?

我正在寻找有关 automapper 中的 CreateMap/CreateProjection 和 ProjectTo/MapTo 之间关系的差异的解释。我刚刚开始使用这个库,我很难理解何时使用什么。我部分理解 ProjectTo 与 LINQ 有一些关系并且可以用于整个集合?我希望在 Blazor 服务器端项目中使用此库。

当我使用 EF Core 时,我也在研究这两个库:

但由于我是图书馆的新手,我认为在继续之前先从基础开始是个好主意。

c# mapping automapper entity-framework-core blazor-server-side

3
推荐指数
1
解决办法
1578
查看次数

通过“交互式服务器渲染模式”和“流式渲染”的组合来防止双重渲染

我正在探索 .NET 8 的新 Blazor 功能,但遇到了一个问题:我的组件似乎渲染了两次。当我将“流渲染”与“交互式服务器渲染模式”结合使用时,会出现此问题。

为了清楚起见,我简化了我的代码:

@attribute [StreamRendering]
@rendermode InteractiveServer

@if (data == null)
{
    <p>Loading...</p>
}
else
{
    <p>@data</p>
}

@code {
   private string? data;

    protected override async Task OnInitializedAsync()
    {
        await Task.Delay(1000);
        data = "Hello World!";
    }
}
Run Code Online (Sandbox Code Playgroud)

在此代码中,我希望首先显示“Loading...”文本,然后在延迟后显示文本“Hello World!” 应该更换它。这是可行的,但是一旦data显示,组件就会重新渲染并且加载文本会再次显示。

我的问题是:

  • 我是对的,第二次重新渲染是因为建立了与服务器的电路连接而发生的?
  • 有没有办法防止第二次重新渲染?

.net asp.net-core blazor blazor-server-side

3
推荐指数
1
解决办法
1276
查看次数

blazor 组件接近性能

最近在创建 blazor 组件时,我遇到了某些问题。

  1. 创建组件的最佳方法是什么(本机和或使用现有的 JavaScript UI)

  2. 选择 Existing JavaScript 时是否存在性能或内存泄漏。

  3. 使用 JavaScript Lib 组件时对服务端 blazor 的任何影响。

  4. 两种方法的优缺点是什么?

c# blazor blazor-server-side

2
推荐指数
1
解决办法
631
查看次数

VS 2017 .Net Core 2.2中缺少Blazor模板

我有一个Visual Studio Enterprise 2017版本15.9.7和.Net core 2.2和.Net SDK 2.2.1。我试图blazor按照此链接创建一个Web应用程序。在本文中,它显示了Blazor类型的模板。但是我的视觉工作室没有得到相同的模板。

在进一步调查中,我找到了此链接,但前提条件包括Visual Studio 2019预览版和SDK 3.0预览版。当版本仍处于预览状态时,我不想立即跳转到它们。

因此,没有办法在当前配置中获取模板吗?有什么解决办法吗?

这是完全相同的问题,但是标记的解决方案在我的情况下不起作用。

编辑1:我尝试安装blazor扩展程序,但它说此扩展程序不能安装在任何当前安装的产品上(在我的情况下是VS 2017)。

编辑2:我尝试使用CLI创建项目,但以错误结束

错误NU1202:软件包Microsoft.AspNetCore.Blazor.Cli 0.9.0-preview3-19154-02与netcoreapp2.2(.NETCoreApp,Version = v2.2)不兼容。软件包Microsoft.AspNetCore.Blazor.Cli 0.9.0-preview3-19154-02支持:netcoreapp3.0(.NETCoreApp,Version = v3.0)

c# visual-studio-2017 blazor blazor-server-side

2
推荐指数
1
解决办法
1650
查看次数

如何在Blazor.Net中将代码与UI分开

引用此VisualStudioMagazine文章,我试图将代码放在单独的文件中,而不是剃刀视图中。

我试过了:

@page "/Item"
@using WebApplication1.Shared
@using WebApplication1.Client.Services;
@inject HttpClient Http
@inherits ItemComponent

@if (ItemList != null)
{
    <table class="table">
        <thead>
            <tr>
                <th>ID</th>
                <th>Name</th>
                <th>Category</th>
                <th>Metal</th>
                <th>Price</th>
                <th>Quantity</th>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in ItemList)
            {
                <tr>
                    <td>@item.ID</td>
                    <td>@item.Name</td>
                    <td>@item.Category</td>
                    <td>@item.Metal</td>
                    <td>@item.Price</td>
                    <td>@item.Quantity</td>
                </tr>
            }
        </tbody>
    </table>
}

@functions{
    public ItemModel[] ItemList;
    ItemComponent IC = new ItemComponent();

    protected override async Task OnInitAsync()
    {
        ItemList = IC.GetItems().Result;
        //ItemList = await Http.GetJsonAsync<ItemModel[]>("api/Item/GetItems");
        StateHasChanged();
    }
}
Run Code Online (Sandbox Code Playgroud)

和ItemComponent:

using System.Threading.Tasks;
using …
Run Code Online (Sandbox Code Playgroud)

c# blazor blazor-server-side asp.net-core-3.0 .net-core-3.0

2
推荐指数
4
解决办法
1477
查看次数

如何解决“当前线程未与渲染器的同步上下文关联”的问题?

我正在尝试在blazor服务器端应用程序中更改用于标题的字符串。但是我无法更新用户界面。

我尝试使用StateHasChanged(),但是没有用,所以我环顾四周,发现在制作的FlightFinder演示中,它具有OnChange事件Action,因此我正在尝试实现它。

它一直有效,直到我尝试刷新浏览器,然后我被这个错误击中

System.InvalidOperationException:'当前线程未与渲染器的同步上下文关联。在触发渲染或修改渲染过程中访问的任何状态时,请使用Invoke()或InvokeAsync()将执行切换到渲染器的同步上下文。

这就是我所拥有的:

private string _title = "TestSite";
public string Title => _title;

public event Action OnChange;

public void ChangePage(string pageName)
{
   _title = pageName;
   NotifyStateChanged();
}

private void NotifyStateChanged(int navigationType = 0)
{
   OnChange?.Invoke();
}
Run Code Online (Sandbox Code Playgroud)

我所要做的就是调用ChangePage(“ some Page Title”),它可以工作,除非像我提到的那样,我尝试刷新。

我只是想通过另一个组件更改一个组件上的字符串,这听起来并不那么疯狂。如果有更好的方法来制作标题或更改其他组件中的内容,我很想听听。

那么,我该怎么做才能确保m调用方法在正确的线程上?还是有其他更有效的更改标题的方法?

先感谢您!

c# asp.net-core blazor blazor-server-side .net-core-3.0

2
推荐指数
3
解决办法
435
查看次数

InputText需要'ValueExpression'参数的值

我希望能够使用Blazor渲染表单(服务器端渲染)

我在那里尝试了大多数教程,但看不到我在做什么错。我已将.net core更新为最新版本的SDK 3.0.100-preview6-012264

    <EditForm Model="@Model" OnValidSubmit="@SubmitValidForm">
        <FluentValidationValidator />
        <ValidationSummary />

        <p class="name">
            Name: <InputText bind-Value="@Model.Name" placeholder="Name"/>
        </p>

        <button type="submit">Submit</button>
    </EditForm>

@code {
    Person Model = new Person();

    void SubmitValidForm()
    {
        Console.WriteLine("OnValidSubmit");
    }
}

Run Code Online (Sandbox Code Playgroud)

public class Person : ComponentBase
    {
        [Required(ErrorMessage = "Enter a name")]
        [StringLength(10, ErrorMessage = "That name is too long")]
        public string Name { get; set; } = "asd";

        [Range(0, 200, ErrorMessage = "Nobody is that old")]
        public int AgeInYears { get; set; }

        [Required]
        [Range(typeof(bool), …
Run Code Online (Sandbox Code Playgroud)

blazor-server-side

2
推荐指数
4
解决办法
711
查看次数

如何获取服务器端 Blazor 应用程序的基本 URL

我有一个服务器端 blazor 应用程序,我需要知道它的基本网址(例如https://localhost:1234https://my-host.com/appname)。

在传统的ASP.NET Web应用程序,我可以检查Request控制器的性能以及从中检索信息(有SchemeHost以及PathBase为该)。但由于这是一个服务器端运行的 Blazor 应用程序,因此没有Request对象(至少在我的理解中,除非在服务Index.cshtml.

我如何才能知道我的应用程序已部署到哪个 URL 并在哪个 URL 上运行?

理想情况下,我在启动时就已经有了这些信息,以便我可以相应地配置我的服务。

blazor blazor-server-side

2
推荐指数
2
解决办法
6439
查看次数

如何从 Blazor 的数据库中获取经过身份验证的用户

我想显示当前登录用户的电子邮件地址。但我不知道,如何得到它。我搜索了很多小时,但一无所获。我找到了一些片段来获取名称,但没有片段可以获取其他字段,例如电子邮件或电话号码。此代码段中的用户没有从数据库中获取它的 ID。

@page "/"
@inject AuthenticationStateProvider AuthenticationStateProvider

<button @onclick="@LogUsername">Write user info to console</button>
<br />
<br />
@Message

@code {
    string Message = "";

    private async Task LogUsername()
    {
        var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
        var user = authState.User;

        if (user.Identity.IsAuthenticated)
        {
            Message = ($"{user.Identity.Name} is authenticated.");
        }
        else
        {
            Message = ("The user is NOT authenticated.");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

asp.net-core blazor blazor-server-side

2
推荐指数
1
解决办法
5156
查看次数

为什么Blazor生命周期方法要执行两次?

因此,随着发布了asp.net core 3.0和blazor 1.0,我开始使用blazor做一些实际的工作。将Blazor组件代码拆分为背后的代码时,我正在使用以下代码

 public class LogoutModel : BlazorComponent
    {
}
Run Code Online (Sandbox Code Playgroud)

不幸的是BlazorComponent不再存在,所以我转到ComponentBase。不确定此更改何时发生..

现在我的其余代码看起来像这样

 public class LogoutModel : ComponentBase
    {

        protected override async Task OnInitializedAsync()
        {
        }

        protected override async Task OnParametersSetAsync()
        {
        }
    }
Run Code Online (Sandbox Code Playgroud)

我注意到的是,生命周期方法按以下顺序执行:OnInitializedAsync()OnParametersSetAsync()OnInitializedAsync()OnParametersSetAsync()

我不太确定为什么每个方法都要执行两次。

这就是我的Blazor文件的样子

@page  "/account/logout"
@inherits LogoutModel

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title></title>
</head>
<body>
    Logout page
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

blazor blazor-server-side

2
推荐指数
2
解决办法
298
查看次数