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>()
};
我正在为 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>()
};