Mvvm Blazor:如何通过URL将参数传递给ViewModel(而不是页面/视图)

Mvvm Blazor:如何通过URL将参数传递给ViewModel(而不是页面/视图),mvvm,blazor,url-parameters,Mvvm,Blazor,Url Parameters,我知道如何将参数从url传递到blazor页面,如下所示: @page "/myPage/{myParameter}" @if(myParameter != null && myParameter != "") { <p>@myParameter</p> } @code{ [Parameter] public string myParameter {get; set;}; } 有没有合适的方法?Th

我知道如何将参数从url传递到blazor页面,如下所示:

@page "/myPage/{myParameter}"

@if(myParameter != null && myParameter != "")
{
  <p>@myParameter</p>
}

@code{
  [Parameter]
  public string myParameter {get; set;};
}

有没有合适的方法?Thx for help(blazor还是新手)

MyParameter
由路由器从路由中提取,并作为
SetParametersAsync
中的参数传递到页面组件中。理论上,您可以为
myParameter
输入setter不要-这绝对不是推荐的做法

另外,假设您在“/mypage/1”上,并导航到“/mypage/2”,则不会调用初始化的“/code>”。您可能认为您正在页面之间导航,但实际上,您只需在同一组件上调用
SetParametersAsync
,并为
MyParameter
添加一个新值

因此类似于:

    protected override void OnParametersSet() 
    {
        if (!ViewModel.myParameter.Equals(myParameter)) ViewModel.myParameter = myParameter;
    }

如果它更改,将确保设置它,否则不设置(我不知道
myParameter
上的getter/setter是什么,以及每次在
OnParametersSet
上都设置了什么!)。理论上,您可以为
myParameter
输入setter不要-这绝对不是推荐的做法

另外,假设您在“/mypage/1”上,并导航到“/mypage/2”,则不会调用初始化的“/code>”。您可能认为您正在页面之间导航,但实际上,您只需在同一组件上调用
SetParametersAsync
,并为
MyParameter
添加一个新值

因此类似于:

    protected override void OnParametersSet() 
    {
        if (!ViewModel.myParameter.Equals(myParameter)) ViewModel.myParameter = myParameter;
    }

如果它发生更改,将确保设置,否则不会设置(我不知道
myParameter
上的getter/setter是什么,以及每次在
OnParametersSet
上设置它时会发生什么!)。

您可以尝试使用ViewModel作为[Parameter]的备份属性
{get=>ViewModel.myParameter;set=>ViewModel.myParameter=value;}
我认为应该已经注入了ViewModel。@jhr很抱歉,我不明白应该尝试什么。我应该在ViewModel.cs或View.razor@Code{…}中将“backing property…”放在哪里?我希望把@code{…}块作为一个没有代码的真实视图文件保留为空。到目前为止,我总是在视图的editform中使用@bind来获取ViewModel的数据,但这次我没有地方进行绑定,因为我不使用页面中的Userinput。我要传递的唯一信息是Url-Parameter。您可以尝试使用ViewModel作为[Parameter]的支持属性
{get=>ViewModel.myParameter;set=>ViewModel.myParameter=value;}
我认为应该已经注入了ViewModel。@jhr很抱歉,我不明白应该尝试什么。我应该在ViewModel.cs或View.razor@Code{…}中将“backing property…”放在哪里?我希望把@code{…}块作为一个没有代码的真实视图文件保留为空。到目前为止,我总是在视图的editform中使用@bind来获取ViewModel的数据,但这次我没有地方进行绑定,因为我不使用页面中的Userinput。我想传递的唯一信息是Url-Parameter.Shaun:那么就不可能在“view.razor”页面上完全空白任何C代码(除了@inject MyViewModelService ViewModel)?并获取ViewModel的url参数?如果我想在viewModel中使用该参数。我应该在view.razor-page中使用OnParameterSet?我的理解正确吗?基本正确。你可以1。将代码放入代码隐藏文件2中。如果您在多个页面上使用相同的
myParameter
,则构建
MyParameterComponentBase
,然后继承。Shaun:那么就不可能将“view.razor”-页面中的任何C代码完全留空(除了@inject MyViewModelService ViewModel之外)?并获取ViewModel的url参数?如果我想在viewModel中使用该参数。我应该在view.razor-page中使用OnParameterSet?我的理解正确吗?基本正确。你可以1。将代码放入代码隐藏文件2中。如果在多个页面上使用相同的
myParameter
,请构建
MyParameterComponentBase
,然后继承。