标签: blazor-server-side

如何在 Blazor 服务器端重定向到不同的路由

在 Blazor 客户端中,可以使用以下方法实现重定向

using Microsoft.AspNetCore.Blazor.Browser.Services;
(...)
BrowserUriHelper.Instance.NavigateTo("/route")
Run Code Online (Sandbox Code Playgroud)

但是,这在 Blazor 服务器项目中不起作用,因为它会生成以下错误:

无法将“Microsoft.AspNetCore.Blazor.Server.Circuits.RemoteJSRuntime”类型的对象转换为“Microsoft.JSInterop.IJSInProcessRuntime”。

Blazor-Server 中的重定向如何?

c# blazor-server-side

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

如何打开CircuitOptions.DetailedErrors?

运行服务器端Blazor应用程序时,我在控制台中收到此消息:

错误:当前电路中存在未处理的异常,因此该电路将被终止。有关更多详细信息,请在“ CircuitOptions.DetailedErrors”中打开详细的异常

我看过Blazor错误处理文档,但无法弄清楚如何真正打开该消息中提到的详细错误?

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

14
推荐指数
3
解决办法
3487
查看次数

如何在服务器端 Blazor 中使用 HttpContext 对象来检索有关用户、用户代理的信息

IP 地址等。通常,当用户询问如何在 Server Blazor 应用程序中执行此操作时,他们要么被告知这是不可能的,要么有时会提供使用 JSInterop 的部分解决方案。但是可以在不诉诸 JSInterop 的情况下完成吗?这是答案...

blazor blazor-server-side

14
推荐指数
1
解决办法
9328
查看次数

如何在 blazor 服务器端本地化验证消息 (DataAnnotationsValidator)

我在最新版本的 VS 2019 中使用 blazor 3.1。

到目前为止,我能够本地化页面标签(标题、表格字段等)。

ListEmployee.razor页面上,我能够本地化表格标题等。在AddEmplyeeValidation.razor页面上,我能够本地化表单标签,但我在本地化验证消息时遇到了问题。

对于Employee.cs文件的验证消息,验证消息Resources/Data在 files的文件夹中定义Data.Employee.resxData.Employee.ar.resx但这似乎不起作用。

    using System.ComponentModel.DataAnnotations;

    namespace BlazorSPA1.Data
    {
        public class Employee
        {
            [MaxLength(50)]
            public string Id { get; set; }

            [Required (ErrorMessage ="Name is RRRequired")]
            [StringLength(20, ErrorMessage = "Name is too long.")]
            public string Name { get; set; }

            [Required]
            [StringLength(20)]
            public string Department { get; set; }
            [MaxLength(100)]
            public string Designation { get; set; }
            [MaxLength(100)]
            public string Company { …
Run Code Online (Sandbox Code Playgroud)

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

14
推荐指数
1
解决办法
4857
查看次数

从 OnInitializedAsync Blazor 调用 javascript 时 JavaScript 互操作错误

我正在关注 NDC Oslo 的示例应用程序,即以下应用程序: https: //github.com/SteveSandersonMS/presentation-2019-06-NDCOslo/tree/master/demos/MissionControl。这实现了 JWT 作为身份验证和授权。但是,当我尝试将代码的实现复制到服务器端 Blazor 时,当我尝试从本地存储中获取存储的 JWT 令牌(如下所述)时,我收到错误消息”

JavaScript interop calls cannot be issued at this time. This is because the component is being 
statically rendererd. When prerendering is enabled, JavaScript interop calls can only be performed 
during the OnAfterRenderAsync lifecycle method.
Run Code Online (Sandbox Code Playgroud)

这是我的 blazor 代码

protected override async Task OnInitializedAsync()
{
    var token = await TokenProvider.GetTokenAsync();
    Branches = await Http.GetJsonAsync<List<BranchDto>>(
        "vip/api/lookup/getbranches",
        new AuthenticationHeaderValue("Bearer", token));
}
Run Code Online (Sandbox Code Playgroud)

错误来自

public async Task<string> GetTokenAsync()
{
   //Code Omitted for brevity …
Run Code Online (Sandbox Code Playgroud)

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

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

onChange 事件未触发 Blazor InputSelect

我有以下代码用于 InputSelect

               <InputSelect class="form-control form-control form-control-sm"
                             placeholder="Role"
                             disabled="@IsReadOnly"
                             @bind-Value="Model.Role"
                              @onchange="@RoleChanged">
                    <option value="Member">Member</option>
                    <option value="Admin">Admin</option>
                    <option value="Pioner">Pioneer</option>
                    <option value="Retailer">Retailer</option>
                </InputSelect>
Run Code Online (Sandbox Code Playgroud)

对于代码:

bool ShowCreated;
bool ShowUpdated;
bool IsReadOnly;
string SelectedRole;

public EditForm AccountForm;
public Multi.Dtos.RegistrationDto Model = new Dtos.RegistrationDto() { Role = "Member" };

public void RoleChanged(ChangeEventArgs e)
{
    SelectedRole = e.Value.ToString();
    Console.WriteLine(e.Value);
}
Run Code Online (Sandbox Code Playgroud)

当我尝试选择一个新项目时,不会调用 RoleChange 函数。有人可以指出这有什么问题吗。正确的值已更改,但未调用事件。

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

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

带有索引参数的 Blazor/razor onclick 事件

我有下面的代码,但是当我单击该<tr>元素时传递的索引参数始终为 9。

这是因为表中有 9 行作为数据传递给组件。所以看起来索引总是最后设置的变量“i”的值...在这种情况下,foreach循环中最后一行之后的i的值是9,所以我在单击所有按钮时得到索引参数为9表中的行...

我的代码中的问题是什么,没有i为每行 onclick 设置值。

    <table border="1">

        @for(int i=0;i< ListData.DataView.Table.Rows.Count; i++)
        {
            <tr @onclick="(() => RowSelect(i))">
                @foreach (ModelColumn col in ListData.ListColumns)
                {
                    <td>@ListData.DataView.Table.Rows[i][col.Name]</td>
                }
            </tr>
        }

    </table>
Run Code Online (Sandbox Code Playgroud)
@code {
 
    private async Task  RowSelect(int rowIndex)
    {
        await ListRowSelected.InvokeAsync(rowIndex);
    }
}
Run Code Online (Sandbox Code Playgroud)

c# razor-pages blazor-server-side

14
推荐指数
1
解决办法
6704
查看次数

Blazor 异常 - 当前线程未与 Dispatcher 关联。使用 InvokeAsync()

我的 Blazor 应用程序有这样的例外

System.InvalidOperationException: The current thread is not associated with the Dispatcher. Use InvokeAsync() to switch execution to the Dispatcher when triggering rendering or component state.
   at Microsoft.AspNetCore.Components.Dispatcher.AssertAccess()
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.AddToRenderQueue(Int32 componentId, RenderFragment renderFragment)
   at Microsoft.AspNetCore.Components.ComponentBase.StateHasChanged()
   at Microsoft.AspNetCore.Components.ComponentBase.Microsoft.AspNetCore.Components.IHandleEvent.HandleEventAsync(EventCallbackWorkItem callback, Object arg)
   at Microsoft.AspNetCore.Components.EventCallback`1.InvokeAsync(TValue arg)
   at MyApplication.Web.Shared.Application.ApplicationBarService.SearchFromUri(NavigationManager navigationManager) in /app/src/MyApplication.Web/Shared/Application/ApplicationBarService.cs:line 132
   at MyApplication.Web.Shared.Application.ApplicationBar.OnAfterRenderAsync(Boolean firstRender) in /app/src/MyApplication.Web/Shared/Application/ApplicationBar.razor:line 367
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle)
2020-09-01 10:32:06.818 +00:00 [ERR] Unhandled exception in circuit 'b625BJVxR9Sa5e1W6l6unK0G7RAkkLuM3kbvMggpJV0'.
System.InvalidOperationException: The current thread is not associated with the Dispatcher. Use InvokeAsync() …
Run Code Online (Sandbox Code Playgroud)

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

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

有什么方法可以与 blazor 页面的主布局进行通信

这里我想将一些标题传递给 mainlayout.razor 页面,以便我的组件或页面可以更新标题的标题。blazor 有没有可能的方法来做到这一点?任何帮助将不胜感激。

@inherits LayoutComponentBase

<div class="page">
    <div class="sidebar">
        <NavMenu />
    </div>

    <div class="main">
        <div class="top-row px-4 bg-success">
            <button onclick="toggleNav()">
                <span class="oi oi-menu"></span>
            </button>
            <div class="text-center">
                hey there
            </div>
        </div>

        <div class="content px-4">
            @Body
        </div>
    </div>
    
</div>

@code
{

}
Run Code Online (Sandbox Code Playgroud)

我的子组件是一个带有 @page 指令的路由器页面,用于在页面之间导航我希望该组件更新此主布局,有什么可能的方法吗?预先感谢您的任何帮助。

问候,

c# components blazor blazor-server-side

14
推荐指数
1
解决办法
5684
查看次数

Blazor Checkbox双向绑定和更改事件

绑定复选框并在该复选框更改时触发事件的正确方法是什么?我尝试了几种不同的方法,但都没有完全按照我的希望工作。请注意,该复选框位于组件中。

<input type="checkbox" checked="@IsChecked" @onchange="CheckboxChanged">
@code{
      [Parameter]
      public bool IsChecked { get; set; } = true;
      private void CheckboxChanged()
      {
           Console.WriteLine($"Checkbox changed {IsChecked}");
      }
}
Run Code Online (Sandbox Code Playgroud)

当页面加载时,它会读取赋予 的值IsChecked,并且当选中 CheckBox 时,会触发该方法。但是, 的值IsChecked并未更新。然后,如果 的绑定值IsChecked在组件外部更改,则该方法不会触发,但 的值IsChecked会更改(应注意 UI 已正确更新)。

我想我需要一个像这样的实际绑定:

<input type="checkbox" @bind="IsChecked" @onchange="CheckboxChanged" >
Run Code Online (Sandbox Code Playgroud)

但是,这会产生onchange使用两个或多个

<input type="checkbox" @bind="IsChecked" @onclick="CheckboxChanged" >
Run Code Online (Sandbox Code Playgroud)

当用户单击该复选框时,它确实会触发该方法,但是IsChecked处于旧值(我假设单击发生在绑定之前)。然后,如果 的值IsChecked在组件外部发生更改,该方法将再次不会触发。

正确的方法是什么?

c# blazor blazor-server-side

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