我有Foo.razor:
@foreach (var item in items) {
<p>@item</p>
}
@code {
private List<string> items = new List<string>();
public void Append(string item) => items.Add(item);
}
Run Code Online (Sandbox Code Playgroud)
如果我有Bar.razor:
<Foo/>
@code {
public void SomeMethod() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能Append("something")从打电话SomeMethod()?

如所附屏幕截图所示,我正在使用路由:
@page“/addbrand/{BrandId:guid}”
当我刷新 url https://localhost:44379/addBrand/1abc52f3-c371-4566-847d-1a986f093396时,这会导致错误 400 无法加载资源,因为 balzor 协商的 url 更改为https://localhost:44379/addBrand /_blazor/negotiate?negotiateVersion=1 而不是 https://localhost:44379/_blazor/negotiate?negotiateVersion=1
https://localhost:44379/addBrand/_framework/blazor.server.js 而不是 https://localhost:44379/_framework/blazor.server.js
这发生在 _host.cshtml 文件中的所有链接上。
有例外吗?是的,浏览器控制台日志:[2020-03-23T21:57:35.846Z] 信息:将“_blazor”规范化为“ https://localhost:44379/addBrand/_blazor ”。_blazor/negotiate?negotiateVersion=1:1 无法加载资源:服务器响应状态为 400 () blazor.server.js:1 [2020-03-23T21:57:35.917Z] 错误:无法完成与服务器:错误
我已经在github上举报了
我有一个页面add,它将向数据库添加一个项目OnValidSubmit,然后重定向到一个页面list。在页面上,list我想显示一条成功消息,如“添加项目”。
我只想显示一次成功消息“添加项目”。如果用户刷新页面,它将消失。因此,通过 传递的路由参数URL似乎是错误的,因为这将在刷新后继续存在。
那么,我如何一次性传递“显示成功消息”标志以及一些附加数据,例如项目名称?
提示:我正在使用 Blazor 服务器端
我正在使用 blazor 并且我正在应用代码优先方法
但问题是我的数据库没有创建
首先我创建一个项目,然后选择一个Visual Studio 2019 -> blazor app -> blazor server app
然后
我在 appsetting.json 添加 connetionstring
{
"ConnectionStrings": {
"DefaultConnection": "Data Source=servername;Initial Catalog=databasename;User ID=userid;Password=password"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
Run Code Online (Sandbox Code Playgroud)
然后
上面的连接字符串名称在 startup.cs 中初始化
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddDbContext<MyDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个 Emp 类
Emp.cs
namespace BlazorServerApp.Pages
{
public class Emp:ComponentBase
{
public int empid { get; set; }
public …Run Code Online (Sandbox Code Playgroud) 我有一个 Blazor 服务器端项目,我一直在 Visual Studio 2019 中使用 .NET5 开发该项目。一切都运转良好。
我刚刚将该站点部署到测试服务器(该服务器上已经运行了两个这样的站点,因此我知道该服务器拥有运行该站点所需的一切),但 Blazor 的东西似乎都不起作用。具体来说...
[Authorize]对任何人都可见不知道要显示什么代码,因为它在 VS 中运行时都有效。App.razor以下是...的内容
<CascadingAuthenticationState>
<Router AppAssembly="@typeof(Program).Assembly">
<Found Context="routeData">
<AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)">
<NotAuthorized>
<RedirectToLogin />
</NotAuthorized>
</AuthorizeRouteView>
</Found>
<NotFound>
<AuthorizeView>
<Authorized>
<LayoutView Layout="@typeof(MainLayout)">
<NotFound />
</LayoutView>
</Authorized>
<NotAuthorized>
<RedirectToLogin />
</NotAuthorized>
</AuthorizeView>
</NotFound>
</Router>
</CascadingAuthenticationState>
Run Code Online (Sandbox Code Playgroud)
该_Imports.razor文件包含所有正确的using内容,特别包括...
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Components.Authorization
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.Web
Run Code Online (Sandbox Code Playgroud)
非登录用户不应访问的页面[Authorize(Roles = "Admin")]在代码隐藏或@attribute [Authorize(Roles = "Admin")]文件中用 进行修饰 …
我是 Blazor 的新手,没有太多使用任务的经验,所以希望我只是犯了一个愚蠢的错误。我有一个通过按下按钮调用的异步方法,但如果在 1-2 秒内再次调用该方法,我会收到以下异常。
Error: System.InvalidOperationException: A second operation was started on this context before a previous operation completed. This is usually caused by different threads concurrently using the same instance of DbContext. For more information on how to avoid threading issues with DbContext, see https://go.microsoft.com/fwlink/?linkid=2097913.
Run Code Online (Sandbox Code Playgroud)
此按钮针对“用户”表中的每一行呈现。我试图快速连续删除多个用户记录,但收到上述错误。
这是按下按钮的代码(使用 AntBlazor)
<Button Type="primary" Danger OnClick="@(async() => await RemoveAsync(user))">Remove User</Button>
Run Code Online (Sandbox Code Playgroud)
这是RemoveAsync 方法的代码。
private async Task RemoveAsync(User user)
{
await UserService.UpdateUserAsync(user);
}
Run Code Online (Sandbox Code Playgroud)
我是否误解了 async/await 的工作原理?或者我是否需要利用任务来确保操作完成?
编辑:
这是 UserService.UpdateUserAsync() 代码
public async Task<bool> UpdateUserAsync(User …Run Code Online (Sandbox Code Playgroud) 抱歉问了这个基本问题。
图像将粘贴并显示在使用 Blazor Server 创建的网页上。
我想定期更新此显示的图像。(例如每秒更新一次)
该图像存储在 wwwroot / imageFiles 位置,名称为 PreviewImage.bmp。
具体来说,我想在替换这个wwwroot/imageFiles下的PreviewImage.bmp时,将网页上显示的图像切换为替换后的图像。
例如,当我将显示狗的 PreviewImage.bmp 更改为显示猫的 PreviewImage.bmp 时,我想切换网页上显示的图像。
我想知道是否可以使用 StateHasChanged () 更新图像;用计时器,但这不起作用。
<img src="@previewImg" />
@code{
private string previewImg = string.Empty;
private Timer timer = new(1000);
protected override void OnInitialized()
{
previewImg = @"imageFiles/PreviewImage.bmp";
timer.Elapsed += (sender, eventArgs) => OnTimerCallback();
timer.AutoReset = true;
timer.Start();
}
private void OnTimerCallback()
{
_ = InvokeAsync(() =>
{
previewImg = @"imageFiles/PreviewImage.bmp";
StateHasChanged();
});
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您使用 F5 键重新加载整个页面,图像将会更新。
有没有办法实现这种图像更新?
很抱歉,内容很难理解。
感谢您的建议。
我有一个 blazor 服务器应用程序,我需要知道在这里为我的应用程序存储一些重要信息,在 appsettings.json 中,一个 .resx 文件?或者别的地方?
我正在编写 blazor 服务器 Web 应用程序。
该应用程序与数据库和实体框架配合使用。
这是我写的一个方法:
private void MyMethod()
{
var query = mydbcontext.mytable1.Where(t => ...);
foreach (var item in query)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,该方法没有用“异步任务”声明。因此,她将在没有“await”关键字的情况下被调用。
我可以用“异步任务”声明它并用“等待”调用它。它有效,但它给了我一个警告,因为我里面没有异步调用。
假设我决定不使用“异步任务”声明它以避免警告。
如果我稍后需要更改函数中需要异步调用的某些内容(例如这个),会发生什么:
private async Task MyMethod()
{
var query = mydbcontext.mytable1.Where(t => ...);
foreach (var item in query)
{
...
}
var countresult = await query.CountAsync();
}
Run Code Online (Sandbox Code Playgroud)
我需要搜索 MyMethod 的所有调用,并在每个调用上添加“await”。
为了防止这种情况,我想知道是否不应该使用“异步任务”声明所有方法。但这很丑陋,因为我会收到警告。
最佳做法是什么?
有没有办法以 ASync 的方式执行此循环?
private async Task MyMethod()
{
var query = mydbcontext.mytable1.Where(t => ...);
await foreachAsync (var item in query) …Run Code Online (Sandbox Code Playgroud) 我正在尝试将字符串格式应用于来自资源文件的字符串。
<p class="note">@((MarkupString)(String.Format(Localizer["Test"], 2)))</p>
Run Code Online (Sandbox Code Playgroud)
但这是它在浏览器中的显示方式:
You have done <span class="text-primary text-bold"> 2 </span> tests.
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能让它采取正确的造型?
我已经尝试过这个解决方案,但它说:
The type or namespace name 'HtmlSanitizer' could not be found
Run Code Online (Sandbox Code Playgroud)
我正在使用 Blazor 服务器和 .NET6
编辑:我有一个名为 App.resx 的文件
<data name="Test" xml:space="preserve">
<value>
You have done
&lt;span class="text-primary text-bold"&gt;
{0}
&lt;/span&gt;
tests.
</value>
</data>
Run Code Online (Sandbox Code Playgroud) 我在使用异步方法时遇到一些问题。我对它有点陌生,但我正在编写一些 Blazor 代码并使用 Blob 存储,并且一些调用需要异步。这是我的代码和问题。此代码需要异步,因为它从 Azure 获取 Blob 数据。(FileUpload 是我的自定义对象):
public async Task<List<FileUpload>> GetAllFilesAsync()
{
// TODO: GENERATE fileupload objects here and return
await foreach (var blobItem in _container.GetBlobsAsync())
{
var name = blobItem.Name;
BlobClient blobClient = _container.GetBlobClient(name);
FileUpload fileUploadViewModel = new FileUpload()
{
FileName = blobItem.Name,
FileStorageUrl = blobClient.Uri.ToString(),
ContentType = blobItem.Properties.ContentType,
};
_allFiles.Add(fileUploadViewModel);
}
return _allFiles;
}
Run Code Online (Sandbox Code Playgroud)
在我的 Blazor 代码(服务器)中,我有以下代码在初始化时调用服务:
private List<FileUpload> fileUploadViewModels = new();
protected override async Task OnInitializedAsync()
{
GetAllBlobsAsync();
}
private void GetAllBlobsAsync()
{
var …Run Code Online (Sandbox Code Playgroud)