标签: blazor-server-side

错误:Microsoft.JSInterop.JSException:将循环结构转换为 .NET7 中的 JSON

我在 .NET6 中创建了一个 Blazor 服务器应用程序。但最近我将其升级到 .NET7。从这次开始,我遇到了上述问题。

错误:Microsoft.JSInterop.JSException:将循环结构转换为 JSON --> 从带有构造函数“Window”的对象开始 --- 属性“window”关闭循环 TypeError:将循环结构转换为 JSON --> 从带有构造函数“的对象开始” Window' --- 属性'window'在 JSON.stringify () 处关闭圆圈

这个问题是从这条线上发生的

await _jsRuntime.InvokeAsync<object>("open", url, "_blank");
Run Code Online (Sandbox Code Playgroud)

该行负责在浏览器的新选项卡中打开 URL。一旦我单击导航栏链接,就会调用上面的行并发生此问题。有人知道此问题的答案吗?请帮助我,感谢您的所有回答。

c# blazor blazor-server-side blazor-jsinterop

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

如何在 Razor Page OnInitialized 事件中使用 404 路由

在服务器端 Blazor 应用程序 (Core 3.1) 中,有一个接受@page属性中的标识符的 Razor。如果 URL 中提供的标识符对应于现有实体,则页面将正常呈现。但是,如果标识符不是已知实体(根据其在存储库中的存在确定),我希望系统执行与 404 Not Found 相对应的任何操作。然而,我不知道这一点,直到路线已经匹配并且我的页面OnInitialized()正在执行。

在这种情况下,如何“重定向”到默认的 404 处理。

页面如下所示:

@page "/{projectname}"

<!-- HTML Here -->

@code {


    [Parameter]
    public string ProjectName {get; set;}

    private UpdateProjectViewModel Project;

    protected override void OnInitialized()
    {
        var project = Repository.Get(ProjectName);
        if (project == null)
        {
            WANT TO USE 404 ROUTING HERE.
        }
        Project = new UpdateProjectViewModel(project));
    }

}
Run Code Online (Sandbox Code Playgroud)

c# .net-core razor-pages blazor-server-side

13
推荐指数
2
解决办法
4804
查看次数

如何从服务器端 Blazor Net Core 5.0 调用 API 控制器操作?

我创建了一个标准 Blazor 服务器应用程序。然后我添加了一个具有读/写操作的 API 控制器。

现在我想从索引页调用一个操作,但它不起作用。应用程序运行时没有错误,但没有返回预期的结果(状态=“等待激活”,方法=“null”和结果=“尚未计算”)。我在控制器操作中放置了一个断点,但程序从未命中它。

控制器:

[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    // GET: api/<ValuesController>
    [HttpGet]
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET: api/<ValuesController>/5
    [HttpGet("{id}")]
    public string Get(int id)
    {
        return "value";
    }
}
Run Code Online (Sandbox Code Playgroud)

索引页:

<button class="btn btn-primary" @onclick="RetrieveGet">
    GET
</button>

void RetrieveGet()
{
    HttpClient Http = new HttpClient();
    string baseUrl = "https://localhost:44382/";
    var temp2 = Task.Run(async () => { await Http.GetStringAsync($"{baseUrl}api/values/5"); });
}
Run Code Online (Sandbox Code Playgroud)

Startup.cs(为简洁起见,删除了其他项目):

public void …
Run Code Online (Sandbox Code Playgroud)

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

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

如何在组件外部放置 Blazor EditForm 的提交按钮

Blazor 文档的表单验证示例EditForm组件中有一个提交按钮组件:

    <EditForm Model="@starship" > OnValidSubmit="@HandleValidSubmit">
        <DataAnnotationsValidator />
        <ValidationSummary />
    
        <p>
            <label for="identifier">Identifier: </label>
            <InputText id="identifier" bind Value="@starship.Identifier" />
        </p>
    
        Snip....

        <button type="submit">Submit</button>

        Snip...

    </EditForm>
Run Code Online (Sandbox Code Playgroud)

无论如何,是否可以将该提交按钮放置在标签之外EditForm并且仍然“本机”触发该EditForm组件的提交,而无需使用 JavaScript?

即代码看起来像这样:

    <!-- Want this button to submit the form in the EditForm tags-->
    <button type="submit">Submit</button>

    Snip...

    <EditForm Model="@starship" OnValidSubmit="@HandleValidSubmit">
        <DataAnnotationsValidator />
        <ValidationSummary />
    
        <p>
            <label for="identifier">Identifier: </label>
            <InputText id="identifier" bind-Value="@starship.Identifier" />
        </p>
    </EditForm>
Run Code Online (Sandbox Code Playgroud)

blazor blazor-server-side

12
推荐指数
1
解决办法
3894
查看次数

在 Blazor 视图中调用异步方法

我有一个服务器端 blazor 客户端,我正在尝试通过登录检查来修改 MainLayout razor 页面。我目前正在使用 Blazored 进行本地存储保存,并且我目前正在使用查看是否保存了令牌以查看用户是否登录,但是我不确定如何在 razor 页面的 if 语句中翻译它,因为它想要异步方法。

我的登录检查非常简单,如下所示。

public async Task<bool> IsLoggedIn()
{
    return await m_localStorage.ContainKeyAsync("token").ConfigureAwait(false);
}
Run Code Online (Sandbox Code Playgroud)

在我的 Razor 页面中,我正在执行此语句检查 - 这显然不起作用,因为没有 async 修饰符

@if (!await AppState.IsLoggedIn()) //Requires async modifier
{
    <a href="Login" target="_blank">Login</a>
}
Run Code Online (Sandbox Code Playgroud)

我也尝试使用 .Result 属性执行此操作,但这会导致抛出异常:(System.AggregateException: 'Information: Executed an implicit handler method, returned result Microsoft.AspNetC)' 带有内部异常 -> NullReferenceException : 你调用的对象是空的。

但是从我所看到的 AppState 被正确注入,本地存储似乎在 AppState 中被正确注入。

@if (!AppState.IsLoggedIn().Result)
{
    <a href="Login" target="_blank">Login</a>
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是解决这个问题的正确方法是什么,有没有办法在剃刀页面中执行异步方法?

c# blazor blazor-server-side

12
推荐指数
1
解决办法
8638
查看次数

如何将焦点设置到 InputText 元素?

使用Microsoft docs 中示例,我尝试以编程方式将焦点设置为输入元素。

不幸的是,该示例使用了标准,<input type="text">而我想将其用于InputTextelement

Microsoft 示例使用了一种扩展方法,该方法采用ElementReference

public static Task Focus(this ElementReference elementRef, IJSRuntime jsRuntime)
{
    return jsRuntime.InvokeAsync<object>(
        "exampleJsFunctions.focusElement", 
        elementRef);
}
Run Code Online (Sandbox Code Playgroud)

使用InputText,我认为无法获得这样的ElementReference.

提供我自己的Focus()重载InputText而不是编译但没有显示视觉结果。所以我一无所知。

我的问题

如何以编程方式将焦点设置为InputText元素?

blazor blazor-server-side

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

在 Blazor 上启动 Google 地图

我正在尝试使用 JSInterop 在我的服务器端 Blazor 应用程序上启动 Google 地图。我似乎已经尝试了几乎所有方法,但无法显示地图。不幸的是,互联网上几乎没有关于它的样本,因为它是一个相当新的框架,而且我自己也同样刚刚开始接触 Blazor,所以我可能做错了很多事情。任何朝着正确方向的推动将不胜感激。

在我的组件文件中,我有:

@page "/MapTest"
@inject IJSRuntime JSRuntime

<style>
    #map {
        width: 60%;
        height: 60%;
    }
</style>

<h1>Display Google Map</h1>


<div @ref="map" id="map"></div>

@code {

    ElementReference map; // reference to the DIV

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        await JSRuntime.InvokeVoidAsync("Showgooglemap", null);
        //StateHasChanged();

    }
}
Run Code Online (Sandbox Code Playgroud)

在我的 _Host.cshtml 文件中,我有:

   <script src="_framework/blazor.server.js"></script>
    <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=xxxmykeyxxx&v=3"></script>

    <script type="text/javascript">
            function initialize() {
                var latlng = new google.maps.LatLng(40.716948, -74.003563);
                var options = {
                    zoom: 14, center: latlng,
                    mapTypeId: google.maps.MapTypeId.ROADMAP …
Run Code Online (Sandbox Code Playgroud)

google-maps-api-3 blazor-server-side

12
推荐指数
1
解决办法
5126
查看次数

如何向服务器端 Blazor 项目添加控制器(而非视图)支持

当我的服务器端 Blazor 应用程序运行时,我希望一些 Javascript 代码_Host.cshtml能够将数据发布到控制器操作。当然,这完全超出了 Blazor 应用程序本身的范围,并且与 Blazor 应用程序本身无关。

我想这将是添加调用的问题services.AddControllers(),并endpoints.MapControllers()在适当的地方Startup.cs。但是,在执行此操作并实施控制器操作之后,我进行了以下观察:

  • 对操作的请求不会被路由并被视为“未找到”
  • 在 Razor 中,@Url.Action控制器操作返回一个空字符串

如何以克服上述两个问题的方式向我的服务器端 Blazor 项目添加控制器(而非视图)支持?

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

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

如何将 Blazor 组件呈现为 HTML 字符串

我正在寻找一种将 Blazor 组件呈现为 HTML 字符串的方法,以便我能够将其用作模板引擎,在我的 Web 应用程序中创建和发送电子邮件。想法?

blazor blazor-server-side blazor-client-side asp.net-blazor

12
推荐指数
2
解决办法
1773
查看次数

为什么在部署 Blazor 服务器端应用时推荐使用 Azure SignalR 服务?

当我在 Azure 上发布 Blazor 服务器端应用程序时,Visual Studio 会提示一条消息:

您的应用程序正在使用 SignalR。对于需要扩展的环境,我们强烈建议添加对 Azure SignalR 服务的依赖。

但是,我的应用程序可以正常工作,无需使用 Azure SignalR 服务。所以我想知道整合它是否真的有意义,或者这只是微软从我们口袋里多掏几美元的一种方式......

有没有人试过在有和没有 Azure SignalR 服务的情况下部署 Blazor 服务器端应用程序,以测试在性能方面是否有任何实际差异?我应该从中获得什么样的优势?

在此处输入图片说明

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

12
推荐指数
3
解决办法
3047
查看次数