OnvalidSubmit激发并编辑上下文.Validate()返回true,即使我的模型是故意无效的



在我的Blazor服务器应用程序项目中,我有一个EditForm,其中包括我的EditContext和OnValidSubmit方法。

<EditForm EditContext="@EditContext" OnValidSubmit="@UpdateProject">我声明并初始化我的EditContext如下:

private EditContext EditContext;
protected override async Task OnInitializedAsync()
{
EditContext = new(supplementedProjectModel);
}

和我的型号:

SupplementedProjectModel supplementedProjectModel = new();

当我用提交按钮提交我的模型时

<button type="submit" class="btn button-primary">Spara</button>

它触发OnValidSubmit事件,即使我的模型在包含的空输入中故意无效

[Required]

属性。为什么?

型号:

public class SupplementedProjectModel
{
public CinodeDataModel CinodeDataModel = new();
}
public class CinodeDataModel
{
public Webhook webhook { get; set; }
}
public class Webhook
{
public WebhookModel WebhookModel { get; set; }
}
public class WebhookModel
{
public Payload Payload { get; set; }
}
public class Payload
{
[Required(ErrorMessage = "Uppdragsnamn obligatorisk")]
public string Title { get; set; }
}

我的第二个问题是在OnValidSubmit方法EditContext中。Validate((始终返回true。为什么?

protected async Task UpdateProject()
{
bool IsValid = EditContext.Validate();
EditContext = new(supplementedProjectModel);
bool isreallyvalid = EditContext.Validate();
if (IsValid)
{
// UPDATE MODEL
}
}

我已经尝试过所有这些注释验证器,当我运行项目并输入无效数据时,我清楚地看到了我的错误。

@*<ObjectGraphDataAnnotationsValidator />*@
<DataAnnotationsValidator />
<ValidationSummary />

在我的UpdateProject方法中,我的EditContext是否应该填充当前模型值?我认为是这样,但找不到任何东西,因此我在再次初始化Validate方法之前和之后对其进行了测试。

感谢阅读!

它触发OnValidSubmit事件,即使我的模型故意无效,而我的模型包含。。。。

您有一个深度模型,因此您必须使用ObjectGraphDataAnnotationsValidator或构建自己的模型。您需要确保模型树中的objects已用[ValidateComplexType]进行了注释。在演示中查看我的3级模型。请注意,我在项目文件中设置了启用了Nullable-<Nullable>enable</Nullable>

演示页面:

@page "/"
@using System.ComponentModel.DataAnnotations;
<PageTitle>Index</PageTitle>
<EditForm EditContext=this.editContext OnValidSubmit=this.OnValidSubmit OnInvalidSubmit=this.OnInValidSubmit  >
<ObjectGraphDataAnnotationsValidator />
<div class="p-2 mb-3">Normal edit fields here</div>
<div class="mb-3">
<button class="btn btn-primary" type="submit">Submit</button>
</div>
<ValidationSummary />
</EditForm>
<div class="bg-dark text-white m-2 p-2">
<div>Forename: @model.Person.Name.Forename</div>
<div>Surame: @model.Person.Name.Surname</div>
<div>Value: @model.Value</div>
</div>
@if (this.message != string.Empty)
{
<div class="alert alert-info">
@message
</div>
}
@code {
private MyModelData model = new();
private EditContext? editContext;
private string message = string.Empty;
public Task OnValidSubmit()
{
this.message = "Valid Submit";
return Task.CompletedTask;
}
public Task OnInValidSubmit()
{
this.message = "InValid Submit";
return Task.CompletedTask;
}
protected override void OnInitialized()
{
this.editContext = new EditContext(model);
}
public class MyModelData 
{
[ValidateComplexType]
public Person Person { get; set; } = new();
[Required]
public int Value { get; set; }
}
public class Person
{
[ValidateComplexType]
public PersonName Name { get; set; } = new();
}
public class PersonName
{
[Required]
public string? Forename { get; set; }
[Required]
public string? Surname { get; set; }
}
}

最新更新