问题描述
我是一个初学者,我正在为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无关的问题...
由于ContactPersons
是ICollection<ContactPerson>
类型的,因此您应使用如下所示的ContactPerson对象的集合实例化ContactPersons字段:
private Contact contact = new Contact
{
ContactPersons = new List<ContactPerson>()
};