提交后如何刷新DataAnnotationsValidator的绿色轮廓

时间:2020-05-22 15:17:28

标签: c# blazor

提交表格后,如何删除blazor中的绿色轮廓输入框? 成功提交后,输入的修改字段仍为绿色轮廓。

在我的页面上,成功提交后可能会加载另一个数据集。 新数据已正确加载到输入字段中,但是边框在输入字段中仍然是绿色的,在先前的数据集中已对其进行了修改。

我在editForm的OnValidSubmit上使用“ StateHasChanged()”进行了尝试,但没有成功;

还有一个通过onclick“ StateHasChanged()”触发的按钮没有帮助。 在我看来,“ StateHasChanged()”不会从blazor的输入字段中删除绿色边框。

而且不想用“ navigateTo”或类似的东西重新装满整个火锅包。

3 个答案:

答案 0 :(得分:1)

嗨,欢迎来到社区!通常,最好的做法是发布一个最小的可复制示例,以供社区使用,因此,如果可以的话,请这样做。我会做一些假设,因为我想我知道发生了什么,并且您可以从中得出结论。如果这是我的想法,则在提交有效的表单后,需要刷新表单的EditContext。

假设您的表单具有模型属性:

public FormModel Model { get; set; }

有两种方法可以将模型附加到<Editform ... >组件。一个使用Model参数,另一个使用EditContext参数。我们将使用后者,因为它使我们可以控制代码块中的上下文。

因此您的剃刀文件将开始如下所示:


<EditForm EditContext="Context" OnValidSubmit="HandleValidSubmit" >

    ..... form body and submit button
</EditForm>

@code {

    public FormModel Model { get; set; } = new FormModel();

    public EditContext Context { get; set; }

    private void HandleValidSubmit()
    {
        //Whatever needs to be done on valid submit

        // Refresh the Editcontext
        Context = new EditContext(Model);

        // You may or may not need this call
        StateHasChanged();
    }

    protected override async Task OnInitializedAsync()
    {
        // Other initialization code, set your initial form model, etc. 

        // Set the form edit context with your model. 
        Context = new EditContext(Model);
    }
}

我们在初始化期间将EditContext设置为您要用于表单的模型,并且所有内容都应正常运行。验证大纲是从EditContext驱动的,因此,如果您在有效表单上提供新的编辑上下文,则大纲将消失。

希望这会有所帮助!

答案 1 :(得分:1)

您的HandleValidSubmit方法应如下所示:

private void HandleValidSubmit()
{
      EditContext.MarkAsUnmodified();
}

希望这行得通...

答案 2 :(得分:1)

谢谢enet和Nik, 您的两个答案结合在一起就可以了。

首先,我必须像Nik所写的那样将EditForm的EditContext绑定到“ Context”属性。 有效提交后,我将调用enet编写的“ MarkAsUnmodified”。

<EditForm EditContext="Context" OnValidSubmit="@MyInsertMethodAsync">

protected override async Task OnInitializedAsync()
{
    Context = new EditContext(MyViewModel);
    await MyViewModel.InitializePropertiesAsync();
}

private async Task MyInsertMethodAsync()
{
    await MyViewModel.InsertMyStuffAsync();
    Context.MarkAsUnmodified();
}