ICollection 属性 在 OnValidSubmit() 期间为空

ICollection property is empty during OnValidSubmit()

我正在为 ICollection 属性 的基本 CRUD 试用免费社区版 Syncfusion Blazor SfGrid。但是虽然我能够在运行时添加、编辑、删除(数据在数据网格中完美显示),但我的 ICollection 属性 在 OnValidSubmit()...[=21= 期间始终为空]

第 1:我的数据模型如下所示:

public class Contact
{
    public int ID { get; set; }
    public string AccountName { get; set; }
    public ICollection<ContactPerson> ContactPersons { get; set; }
}

public class ContactPerson
{
    public int ID { get; set; }
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }
}

第二:我的 create.razor 使用我的 ContactForm.razor 来实现可重用性

<h1>Create</h1>
<hr />
<div style="margin: 50px">
    <ContactForm Contact="contact" OnValidSubmit="@CreateRecord" OnCancelButton="@CancelRecord"/>
</div>

@code {
    private Contact contact = new Contact
    {
        ContactPersons = new ContactPerson[0],
        ContactAddresses = new ContactAddress[0]
    };

    void CancelRecord()
    {
        uriHelper.NavigateTo("contact");
    }

    async Task CreateRecord()
    {          
        await http.PostAsJsonAsync("api/Contact", contact);
        uriHelper.NavigateTo("contact");
    }
}

3:我的 ContactForm.razor 看起来像这样(我用它来创建和编辑记录):

@if (Contact == null)
{
    <text>Loading...</text>
}
else
{
    <EditForm Model="@Contact" OnValidSubmit="@OnValidSubmit">
        <DataAnnotationsValidator />
        <ValidationSummary />
        <div class="form-row">
            <div class="form-group col-md-3">
                <SfTextBox @bind-Value="@Contact.AccountName" Placeholder="Account Name"></SfTextBox>
                <ValidationMessage For="@(() => Contact.AccountName)"></ValidationMessage>
            </div>
        </div>
        
        <!-- List of Contact Persons -->
        <div class="form-row">
            <div class="form-group col-md-10">
                <SfGrid DataSource="@Contact.ContactPersons" Toolbar="@(new List<string>() { "Add", "Edit", "Delete", "Cancel", "Update" })" AllowPaging="true">
                    <GridEditSettings AllowAdding="true" AllowEditing="true" AllowDeleting="true"></GridEditSettings>
                    <GridColumns>
                        <GridColumn Field=@nameof(ContactPerson.ID) IsPrimaryKey="true" HeaderText="ID"></GridColumn>
                        <GridColumn Field=@nameof(ContactPerson.FirstName) HeaderText="First Name"></GridColumn>
                        <GridColumn Field=@nameof(ContactPerson.MiddleName) HeaderText="Middle Name"></GridColumn>
                        <GridColumn Field=@nameof(ContactPerson.LastName) HeaderText="Last Name"></GridColumn>                        
                    </GridColumns>
                </SfGrid>
            </div>
        </div>

        <!-- Post and Back Link -->
        <hr />
        <div>
            <SfButton type="submit" CssClass="e-primary">Sumbit</SfButton>
            <SfButton type="button" CssClass="e-danger" @onclick="@OnCancelButton">Cancel</SfButton>
        </div>
    </EditForm>
}

@code {
    [Parameter] public Contact Contact { get; set; }
    [Parameter] public EventCallback OnValidSubmit { get; set; }
    [Parameter] public EventCallback OnCancelButton { get; set; }
}

我遇到的问题是,当我将它传递给我的控制器(webapi)时,Contact.ContactPersons 是空的,当我在 CreateRecord() which is `` OnValidSubmit 中断时,观察变量 Contact.ContactPersons in VS2019,变量为空表示

Unable to Evaluate.

请帮助我了解发生了什么。

问题与 Blazor 无关...

由于 ContactPersons 属于 ICollection<ContactPerson> 类型,您应该使用 ContactPerson 对象的集合实例化 ContactPersons 字段,如下所示:

 private Contact contact = new Contact
    {
        ContactPersons = new List<ContactPerson>()
       
    };