我有一个blazor服务器大小应用程序,其中编辑形式内有一个编辑形式. 看起来是这样的:
<EditForm Model=@newPerson Context="PersonForm" OnValidSubmit="@FormSubmitted">
<ValidationSummary />
<div class="form-row">
<h4>Staff Information</h4>
</div>
<div class="form-row">
<div class="form-group col-md-2">
<label for="ResourceId">Person Id</label>
<InputText @bind-Value=newPerson.ResourceId class="form-control" id="ResourceId" />
</div>
<div class="form-group col-md-2">
<label for="Title">Title</label>
<InputText @bind-Value=newPerson.Title class="form-control" id="Title" />
</div>
<div class="form-group col-md-2">
<label for="Forename">Forename</label>
<InputText @bind-Value=newPerson.Forename class="form-control" id="Forename" />
</div>
<div class="form-group col-md-2">
<label for="Surname">Surname</label>
<InputText @bind-Value=newPerson.Surname class="form-control" id="Surname" readonly />
</div>
</div>
<EditForm Model=@newPos OnValidSubmit="@AddPosition">
<DataAnnotationsValidator />
<ValidationSummary />
<div class="form-row">
<h4>Position</h4>
</div>
<div class="form-row">
<div class="form-group col-md-2">
<label for="newPositionId">Position Id</label>
<InputText @bind-Value=newPos.PositionId class="form-control" id="newPositionId" />
</div>
<div class="form-group col-md-2">
<label for="newPositionName">Position Name</label>
<InputText @bind-Value=newPos.PositionName class="form-control" id="newPositionName" />
</div>
</div>
<input type="submit" class="btn btn-primary" value="Add Additional Position" />
</EditForm>
<br />
<input type="submit" class="btn btn-primary form-group mr-1" value="Save Person" />
<hr />
</EditForm>
这些表格的模型包括:
public class Person
{
[Required]
public string ResourceId { get; set; }
[Required]
public string Title { get; set; }
[Required]
public string Forename { get; set; }
[Required]
public string Surname { get; set; }
public List<Position> Positions { get; set; }
}
public class Position
{
[Required]
public string PositionId { get; set; }
[Required]
public string PositionName { get; set; }
}
这些表格调用的提交方法包括:
void AddPosition(EditContext editContext)
{
bool formIsValid = editContext.Validate();
if (formIsValid == true)
{
newPerson.Positions.Add(newPos);
newPos = new Position();
//JsRuntime.InvokeVoidAsync("alert", "Position added. Click submit to add another.");
}
}
void FormSubmitted(EditContext editContext)
{
bool formIsValid = editContext.Validate();
if (formIsValid == true)
{
newHr.Positions.Add(newPos);
OnInitializedAsync();
}
}
这允许我将多个职位添加到人员记录中,并且这样做时,表单将正确验证,但是在保存顶级表单(人员)时,它将正确验证人员,但忽略子表单(职位)上的验证. 这样我就可以在提交表格时将无效数据添加到人员记录中,因为职位中包含空数据.
当使用FormSubmitted方法提交主编辑表单时,是否可以验证子编辑表单?
我try 过向模型添加各种验证,并向人员模型内的位置添加[必需]标签,但这不起作用. 我还try 调整编辑表格上的子上下文. 我try 让AddStatus表单将其验证传递给主表单,但根本无法让它起作用. 我考虑过使用外部验证nuget包,但如果可能的话,我最好使用原生blazor来完成这一任务.