Blazor组件中分配的变量与主变量相关联



Blazor组件中分配的Var与主Var链接。

客户端项目中Blazor的ASP.NET Core托管项目我有一个带有一些inputText的组件。我使用一个"Person"类作为模型,并在OnInitializedAsync((上从Person分配Person2,当通过inputText修改模型(Person(时,Person同时被修改,我不知道为什么。这个过程是因为我想在用户修改Person状态之前保持它,并且如果用户单击"取消"按钮,我可以返回到以前的状态。我该怎么做?谢谢

Mi组件:

<EditForm Model="Person" OnValidSubmit="SendPerson" class="form-inline col-11">
<DataAnnotationsValidator />
<div class="m-auto">
<InputText class="" @bind-Value="@Person.Nom" />
<ValidationMessage For="@(() => Person.Nom)" />
</div>
<div class="m-auto">
<InputText class="" @bind-Value="@Person.Cognom1" />
<ValidationMessage For="@(() => Person.Cognom1)" />
</div>
<div class="m-auto">
<InputDate class="" @bind-Value="@Person.Cognom2" />
<ValidationMessage For="@(() => Person.Cognom2)" />
</div>
<button class="btn btn-primary m-auto" type="submit">Send</button>
</EditForm>
<button class="btn btn-warning col-1 m-auto" @onclick="CancelPerson"><span class="glyphicon glyphicon-remove"></span>Cancel</button>
@code {
[Parameter]
public persones Person { get; set; }
public persones Person2 { get; set; }
async Task SendPerson()
{
var result = await Http.PostJsonAsync<persones>("api/Persones/SetPerson", Person);
}
protected override void OnInitialized()
{
base.OnInitialized();
Person2 = Person;
}
private void CancelPerson()
{
Person = Person2;
}}

这是因为两个变量都包含相同的对象,并指向内存中的相同位置(引用类型(。但忘了这一点。。。您应该在对象可供使用之前立即将其存储在本地存储中。如果需要,例如,您的用户按下取消按钮,您可以从本地存储中读取此值。这就是为什么我们有本地存储。它在创建向导组件、购物车组件等时非常有用。Blazor服务器应用程序和Blazor WebAssembly应用程序都可以使用它。您可以使用JSInterop直接调用JavaScript localStorage和sessionStorage,或者最好使用社区或Blazor团队创建的Blazor库。

当您将引用类型(值与引用类型(分配给另一个变量时,您基本上是在存储对该对象的引用(指针(,而不是复制该对象。当您更改从Person变量引用的persones对象时,具有相同引用的Person2变量也会更改。

我认为必须有一些persones类的实例化,因为在OnInitialized((中,如果它是类,则将null赋值为null,而EditForm会抱怨null的"things"。

相关内容

  • 没有找到相关文章

最新更新