微软.Net Blazor的主要特点是什么?我们可以用它代替React或Angular吗?Blazor会提供Angular或React提供的所有工具吗?
我正在使用 Blazor 和 Windows 身份验证启动一个新站点,并且需要识别查看页面/组件的当前用户。
对于 Razor 页面,可以使用 访问当前用户名Context.User.Identity.Name,但这在 Blazor 组件中似乎不起作用。我尝试将 HttpContext 注入组件,但 Context 在运行时为空。
作为奖励,我最终希望将其合并到 Startup.cs 中,因此我只需要获取一次用户名,就可以为我的应用程序利用企业用户类(使用 EF Core)。也将不胜感激针对该用例量身定制的答案。
asp.net-core blazor blazor-server-side .net-core-3.0 ef-core-3.0
我有一个运行 Net 6 Preview 4 的简单 Blazor WASM,我使用本指南进行设置:
确切的代码与 Net 5.0 完美配合(使用相应的 Net 5.0 程序集)
但是,当我升级到 Net 6 时,我收到以下身份验证错误:
There was an error trying to log you in: 'Cannot read property 'toLowerCase' of undefined'
Run Code Online (Sandbox Code Playgroud)
我似乎也无法获得更多细节。这是在 Azure 应用服务自包含发布上发布的。
代码可以在这里找到: https ://github.com/aherrick/BlazorWASM.Net6Prev4.AzureAD
我HttpGet在我的 Server-API 中创建了一个 CSV 文件并返回它FileStreamResult:
[HttpGet]
public IActionResult Get() {
// do logic to create csv in memoryStream
return new FileStreamResult(memoryStream, "text/csv;charset=utf-8") {
FileDownloadName = "products.csv",
};
}
Run Code Online (Sandbox Code Playgroud)
在我的 Blazor-Client 应用程序中,我创建了一个带有处理程序的按钮:
private async Task DownloadCatalog() {
var file = HttpClient.GetAsync("api/csvProduct");
// ... how do I download the file in the browser?
}
Run Code Online (Sandbox Code Playgroud)
调用了控制器中的 Get,但我不知道该怎么做才能在 api 调用后将文件下载到浏览器中。
我想尝试使用 blazor 并弄乱它并制作一些用于测试的东西。我真的很喜欢它,但唯一真正让我烦恼的是在编写 C# 的 razor 文件中突出显示序列。
我在上图中标出了一些“亮点”。有什么方法可以删除它,所以它看起来很正常,就像我在 .cs 文件中写入一样?
我有一个关于 Blazor 服务器端的问题。
我想@page用变量或属性定义路由 url。
我现在可以使用以下默认方法
@page "/route-url"
<h1>Page Test</h1>
@code {
}
Run Code Online (Sandbox Code Playgroud)
但我想使用如下方法
@page MenuItem.Role
<h1>Page Test</h1>
@code {
}
Run Code Online (Sandbox Code Playgroud)
我尝试了上面的方法然后抛出异常。就像下面的异常一样。
C:\Projects\TestBlazorProject\Pages\TestPage.razor(1,7): error RZ1016: The 'page' directive expects a string surrounded by double quotes. [C:\Projects\TestBlazorProject\TestBlazorProject.csproj]
Run Code Online (Sandbox Code Playgroud)
如何@page使用任何不同的变量或任何类属性定义路由 url?
我刚刚将 Blazor 项目从 Core 3 Preview 6 迁移到了 Preview 8,现在出现此错误:
无法从绑定属性“绑定值”推断出属性名称。绑定属性应采用“bind”或“bind-value”形式,以及相应的可选参数,如“bind-value:event”、“bind:format”等。
我已经隔离了导致这种情况发生的组件,并且代码似乎bind-value按照错误消息中的说明进行了设置:
<TelerikDropdownList Data="@State.ContainerSizes"
ValueField=@nameof(ContainerSize.ContainerSizeId)
TextField=@nameof(ContainerSize.ContainerSizeName)
@bind-Value="@ContainerSizeIdNoNull"
>
</TelerikDropdownList>
Run Code Online (Sandbox Code Playgroud)
我试过删除@from@bind-Value和更改大写@bind-Value等,但都无济于事。
什么可能导致这种情况?
我试图显示引导模式然后绑定它的按钮。但是我无法通过显示模态的第一步。我正在使用 .net core 3.1 的 Blazor 客户端模板。我有一个名为 Modal.razor 的页面,其中包含我从 getbootstrap.com 找到的引导模式。
@if (Show)
{
<div class="modal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Modal title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<p>Modal body text goes here.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary">Save changes</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
}
@code {
[Parameter]
public bool Show { get; set; } = false;
}
Run Code Online (Sandbox Code Playgroud)
我在 index.razor 文件中调用了模态
@page "/" …Run Code Online (Sandbox Code Playgroud) Blazor 服务器端(dotnet 核心 3.1)
我遇到了在客户方面显示的问题:
无法重新连接到服务器。重新加载页面以恢复功能。
每次我更新代码库或互联网时都会坏掉或类似的东西。
现在的目标是它应该在服务器再次返回时(或在某个时间间隔内)重新加载页面。
有什么可能可以帮助我吗?
我知道调用该StateHasChanged()方法会通知组件状态已更改,因此它应该重新渲染。
但是,我也看到调用await InvokeAsync(StateHasChanged)或await InvokeAsync(() => StateHasChanged())在其他人的代码中,但我不太明白它与其他人的代码有何不同StateHasChanged()以及应该在何处选择一个,以及为什么.
我能找到的唯一信息是Blazor 文档的这一部分,它说:
如果必须根据外部事件(例如计时器或其他通知)更新组件,请使用 InvokeAsync 方法,该方法分派到 Blazor 的同步上下文。
我不太明白这个。它只是说“......它调度到 Blazor 的同步上下文”,但我对此不太满意!什么是“Blazor 的同步上下文”?
我试过在 a的事件中调用StateHasChanged()- 而不是InvokeAsync(StateHasChanged)- ,它按预期工作,没有任何问题。我应该打电话吗?!如果是这样,为什么?我觉得这里可能有一些我不知道的重要细微差别。TimerElapsedawait InvokeAsync(StateHasChanged)
我也看到过类似的电话InvokeAsync(() => InvokeAsync(Something)),为什么?
另外,我有时也会看到InvokeAsync()没有调用await,那有什么关系?!