我知道调用该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,那有什么关系?!
我将 vs 2019 16.3.10 更新为 16.4,将 .net core 3.0 更新为 .net core 3.1,但缺少 blazor Web 程序集应用程序模板。
第一次进入 Blazor。
在开始模板中,我看到事件 btnClicked 是如何工作的。
对于按钮事件,它是这样的:
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
Run Code Online (Sandbox Code Playgroud)
当我不想在点击按钮上调用 IncementCount 时,它是什么代码行
但是在“onload page event”或者这个事件叫什么?
谢谢帮助
我刚刚为 .net 6 创建了 Blazor Web Assembly 解决方案,并选择了“个人帐户”和“ASP.NET Core 托管”。
此消息显示在 .Server 项目的 ReadMe.txt 中:
此代码包含对 Duende IdentityServer 的依赖项。这是一个具有互惠许可协议的开源产品。如果您计划在生产中使用 Duende IdentityServer,这可能需要支付许可费。要了解如何使用 Azure Active Directory 作为您的身份,请参阅https://aka.ms/aspnetidentityserver要了解您是否需要 Duende IdentityServer 的商业许可证,请参阅 https://aka.ms/identityserverlicense
因此,看起来 Microsoft 正在为其 Blazor WA TEMPLATE Server 元素使用非常昂贵的商业软件。
首先,在他们的 Blazor 模板中包含商业软件是荒谬的 - 我只能假设他们在切换到“Duende”之前就开始使用它,并且它不再是免费的。
对于大多数仅出于身份目的的项目来说,1000 美元的年费(取决于项目)是不可接受的。
我可以在.Server项目中看到这个包:Microsoft.AspNetCore.ApiAuthorization.IdentityServer
如果我删除它,我认为我已经从项目中删除了 Duende 商业软件的所有痕迹?
另外,是否有任何方法可以使用不使用商业软件(或 Microsoft Identity Platform)的服务器元素(用于身份验证等)来模板化 Blazor Web Assembly 项目。
例如,在服务器上使用 .net Core Identity 进行身份验证就可以了 - 但我猜这不作为模板存在?
谢谢。
我已将我的应用程序迁移到 .Net 8,并使用 ubuntu 22.04.3 LTS VPS 来托管我的 Web 应用程序。
我正在尝试在 VPS 上安装 .net 8,但无法安装
我已经尝试过微软的脚本安装,但没有成功
我已经尝试过microsoft 的Debian 安装,但没有成功
当我运行 ubuntu 的基本命令时
sudo apt-get update && \
sudo apt-get install -y dotnet-sdk-8.0
Run Code Online (Sandbox Code Playgroud)
即使更新和升级 ubuntu 后,我也会遇到以下错误
我在 ASP.NET Core 3 预览版 4 中使用服务器端 Blazor 组件。
我有一个父组件和子组件,使用相同的共享模型,如下所示:
模型 :
public class CountModel
{
public int Count { get; set; }
public void Increment()
{
Count++;
}
}
Run Code Online (Sandbox Code Playgroud)
父组件:
@page "/count"
<CascadingValue Value="currentCount">
<h1>Count parent</h1>
<p>Current count is : @currentCount.Count</p>
<button class="btn btn-primary" onclick="@currentCount.Increment">+1 from parent</button>
<CountChild></CountChild>
</CascadingValue>
@functions {
private CountModel currentCount = new CountModel();
}
Run Code Online (Sandbox Code Playgroud)
子组件:
<h1>Count child</h1>
<p>Current count is : @currentCount.Count</p>
<button class="btn btn-primary" onclick="@currentCount.Increment">+1 from child</button>
@functions {
[CascadingParameter]
private CountModel currentCount { …Run Code Online (Sandbox Code Playgroud) 我在 App.razor 上收到此错误:
发现具有意外名称“CascadingAuthenticationState”的标记元素。如果这是一个组件,请为其命名空间添加@using 指令
这是我正在使用的代码
<CascadingAuthenticationState>
<Router AppAssembly="@typeof(Program).Assembly">
<Found Context="routeData">
<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
</Found>
<NotFound>
<LayoutView Layout="@typeof(MainLayout)">
<p>Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>
</CascadingAuthenticationState>
Run Code Online (Sandbox Code Playgroud)
我正在使用 Visual Studio 2019 预览版,我可以运行该应用程序,但是,为什么我在 Cascading.... 中有红线?
我的公司正在从遗留代码库转向更现代的平台,我们正在转向 Blazor。我们目前刚刚参与 ORM 和最佳实践,似乎有很多关于项目设置的相互矛盾的想法(至少从我收集到的内容来看)。我目前的结构如下:
首先是一个名为 DAL 的类库——这是我们的“数据层”。我们正在使用 Dapper,它相对简单。示例类如下所示:
public class Person
{
public string Id {get; set;}
public string FirstName {get; set;}
public string LastName {get; set;}
public Person() {}
public Person(DbContext context) {}
public void GetPerson(int id) {}
public void DeletePerson(int id) {}
etc....
}
Run Code Online (Sandbox Code Playgroud)
第二个项目是引用项目 DAL 的服务器 Blazor 项目。项目划分如下:
一个例子可能是这样的:
public class EmployeeModel
{
public int Id {get; set;}
public int Department{get; set;}
public DateTime HireDate {get; set;}
public decimal Salary {get; set;} …Run Code Online (Sandbox Code Playgroud) 我有一个 ProjectBase.razor 页面,用于创建、查看和编辑项目。以下路线都会带您进入此页面:
/project/view/{projNum}
/project/create/
/project/edit/{projNum}
Run Code Online (Sandbox Code Playgroud)
我的导航菜单中还有一个 Navlink,允许您创建一个新项目:
<NavLink class="nav-link" href="/Project/Create" Match="NavLinkMatch.All" >
<span aria-hidden="true">New Project</span>
</NavLink>
Run Code Online (Sandbox Code Playgroud)
如果我在同一页面的查看/编辑功能上单击该链接,URL 将更改为“/Project/Create”,但页面本身不会刷新或重新加载。有没有办法通过 NavLink 强制执行此操作?或者我需要添加一个 OnClick 函数来做到这一点?
在 JavaScript 中,我们可以使用以下调用将调试输出写入浏览器的控制台:
console.log("My debug output.");
Run Code Online (Sandbox Code Playgroud)
谷歌浏览器中的输出:
如何通过 Blazor WebAssembly 将组件中的“我的调试输出”记录到浏览器的控制台?
<button @onclick="ClickEvent">OK</button>
@code {
private void ClickEvent()
{
// console.log("My debug output.");
}
}
Run Code Online (Sandbox Code Playgroud)