.net core .Net Core 3.5 Blazor可选int路由参数

.net core .Net Core 3.5 Blazor可选int路由参数,.net-core,parameters,routes,blazor,blazor-server-side,.net Core,Parameters,Routes,Blazor,Blazor Server Side,试图找出如何使我的int-route参数成为可选的,而不必求助于处理querystring。例如,如果我希望param1和param2是可选的。如果在传入int参数时尝试将其保留为空,则它将与路由完全不匹配。所以 https://localhost/MyComponent///testString 与下面的代码不兼容。我意识到我可以通过0,但这是我在这一点上的好奇心:) 您可以使用多个@page属性 MyComponent.razor @page "/MyComponent"

试图找出如何使我的int-route参数成为可选的,而不必求助于处理querystring。例如,如果我希望param1和param2是可选的。如果在传入int参数时尝试将其保留为空,则它将与路由完全不匹配。所以

https://localhost/MyComponent///testString
与下面的代码不兼容。我意识到我可以通过0,但这是我在这一点上的好奇心:)


您可以使用多个
@page
属性

MyComponent.razor

@page "/MyComponent"
@page "/MyComponent/{param3}"
@page "/MyComponent/{param1:int}/{param2:int}/{param3}"
@page "/MyComponent/{param1:int}/null/{param3}"
@page "/MyComponent/null/{param2:int}/{param3}"
@page "/MyComponent/null/null/{param3}"

<div class="d-flex flex-column">
<div>Param1 @Param1</div>
<div>Param2 @Param2</div>
<div>Param3 @Param3</div>

<a href="/MyComponent/Test 1">Test 1</a>
<a href="/MyComponent/1/2/Test 2">Test 2</a>
<a href="/MyComponent/3/null/Test 3">Test 3</a>
<a href="/MyComponent/null/4/Test 4">Test 4</a>
<a href="/MyComponent/null/null/Test 5">Test 5</a>
</div>
@code {
    [Parameter] public int? Param1 { get; set; }
    [Parameter] public int? Param2 { get; set; }
    [Parameter] public string Param3 { get; set; }
}
@page”/MyComponent
@页面“/MyComponent/{param3}”
@页面“/MyComponent/{param1:int}/{param2:int}/{param3}”
@页面“/MyComponent/{param1:int}/null/{param3}”
@页面“/MyComponent/null/{param2:int}/{param3}”
@页面“/MyComponent/null/null/{param3}”
Param1@Param1
Param2@Param2
Param3@Param3
@代码{
[Parameter]public int?Param1{get;set;}
[Parameter]public int?Param2{get;set;}
[参数]公共字符串Param3{get;set;}
}

用于enet。我从我的VS窗口复制了这个:

@page "/counter/{currentCount:int?}/{Param1:int?}"

<h1>Counter</h1>

<p>Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
    // private int currentCount = 0;

    [Parameter] public int currentCount { get; set; } = 0;
    [Parameter] public int Param1 { get; set; }


    private void IncrementCount() {
        currentCount++;
    }

    protected override void OnInitialized() {
        currentCount = currentCount + Param1;


        base.OnInitialized();
    }
}
@page”/counter/{currentCount:int?}/{Param1:int?}
柜台
当前计数:@currentCount

点击我 @代码{ //私有int currentCount=0; [参数]public int currentCount{get;set;}=0; [参数]public int Param1{get;set;} 私有void IncrementCount(){ currentCount++; } 受保护的覆盖无效OnInitialized(){ currentCount=currentCount+Param1; base.OnInitialized(); } }
不可能。。。它必须起作用。它在我的设计上起作用。告诉你什么,双击项目的名称(不是解决方案)。您应该看到类似这样的内容:net5.0如果您还有其他内容,请将其删除并保存到某个位置。。。netcoreapp3.1为什么不升级到.Net 5.0?无论如何,它应该适用于Blazor的所有版本。如果您感兴趣,请将您的完整项目上传到github,或者在这里发布一个压缩链接,我将在我的设备上运行它。代码应该有效……目前不可能,因为它是用于工作的。显然,它在这个版本的Blazor中不起作用。至少当我们着手升级时,我可以期待它在.NET5中工作。谢谢你的帮助。你说的“这是为了工作”是什么意思。伙计,你应该创建一个新品牌的应用程序,.Net 5.0,转到计数器组件的默认模板,并用我的代码替换其内容。这并不理想,但我还无法升级到.Net 5,所以这是可行的:)我只需确保我的路线可以以这种方式管理,可以很容易地失控。谢谢
@page "/counter/{currentCount:int?}/{Param1:int?}"

<h1>Counter</h1>

<p>Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
    // private int currentCount = 0;

    [Parameter] public int currentCount { get; set; } = 0;
    [Parameter] public int Param1 { get; set; }


    private void IncrementCount() {
        currentCount++;
    }

    protected override void OnInitialized() {
        currentCount = currentCount + Param1;


        base.OnInitialized();
    }
}