标签: blazor

Blazor 中的 StateHasChanged() 与 InvokeAsync(StateHasChanged)

我知道调用该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,那有什么关系?!

blazor blazor-server-side blazor-webassembly

22
推荐指数
1
解决办法
4983
查看次数

缺少 Visual Studio 2019 blazor webassembly 应用程序模板

我将 vs 2019 16.3.10 更新为 16.4,将 .net core 3.0 更新为 .net core 3.1,但缺少 blazor Web 程序集应用程序模板。

visual-studio .net-core webassembly blazor

21
推荐指数
1
解决办法
7955
查看次数

在 Blazor 中如何在页面加载(事件名称)时调用函数?

第一次进入 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”或者这个事件叫什么?

谢谢帮助

events call blazor

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

从 MS Blazor Web Assembly 模板解决方案服务器项目中删除 Duende IdentityServer

我刚刚为 .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 进行身份验证就可以了 - 但我猜这不作为模板存在?

谢谢。

blazor blazor-server-side blazor-webassembly

21
推荐指数
0
解决办法
2871
查看次数

无法找到包 dotnet-sdk-8.0

我已将我的应用程序迁移到 .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 后,我也会遇到以下错误

在此输入图像描述

.net asp.net ubuntu blazor .net-8.0

21
推荐指数
1
解决办法
1万
查看次数

Blazor 组件:从子组件更新模型时刷新父组件

我在 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)

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

20
推荐指数
5
解决办法
3万
查看次数

发现具有意外名称“Cascading AuthenticationState”的标记元素

我在 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 blazor-client-side

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

Blazor 项目结构/最佳实践

我的公司正在从遗留代码库转向更现代的平台,我们正在转向 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 项目。项目划分如下:

  1. 模型 - 这些是当前正在处理的项目的特定模型。例如,一个模型可能是多个表(来自 DAL 类的模型)的组合,或者只是用于网页表单的字段。

一个例子可能是这样的:

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)

c# mvvm .net-core blazor blazor-server-side

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

NavLink 更新 URL 但不会在 Blazor 中重新加载页面

我有一个 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 函数来做到这一点?

asp.net-core blazor

20
推荐指数
4
解决办法
1万
查看次数

如何通过 Blazor WebAssembly 写入浏览器的控制台?

在 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)

blazor blazor-client-side asp.net-blazor

20
推荐指数
4
解决办法
1万
查看次数