在OnValidSubmit

问题描述

我是一个初学者,我正在为ICollection属性的基本CRUD尝试 Syncfusion Blazor SfGrid 的免费社区版本。但是,尽管我可以在运行时添加,编辑和删除数据在datagrid中完美显示),但在OnValidSubmit()期间,我的ICollection属性始终为空 ...

第一:我的数据模型如下:

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; }
}

2nd:我的 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");
    }
}

3rd:我的 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; }
}

问题,我遇到的问题是,当我将Contact.ContactPersons传递给我的控制器( webapi )时,以及当我在CreateRecord()处中断时,该联系人为空是OnValidSubmit,并且监视变量VS2019中的Contact.ContactPersons变量为空,并显示无法评估”。

请帮助我了解发生了什么事?

解决方法

与Blazor无关的问题...

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

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