我们可以在外部表单中使用
OnSubmit
,并在外部表单和内部表单上手动进行验证。
<EditForm Model=@newPerson Context="PersonForm" OnSubmit="@FormSubmitted">
<DataAnnotationsValidator />
<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>
<EditForm EditContext="@EC" 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>
@code {
private Person newPerson = new ();
private Position newPos = new ();
private EditContext EC { get; set; }
protected override async Task OnInitializedAsync()
{
EC = new EditContext(newPos);
}
void AddPosition(EditContext editContext)
{
bool formIsValid = editContext.Validate();
if (formIsValid == true)
{
newPerson.Positions.Add(newPos);
newPos = new Position();
}
}
void FormSubmitted(EditContext editContext)
{
bool personFormIsValid = editContext.Validate();
bool formIsValid = EC.Validate();
if (formIsValid == true)
{
OnInitializedAsync();
}
}
}