将值从子组件(表单)传递到父组件(提交按钮所在的位置)
Pass values from child component (form) into parent component (where submit button located)
我已将大组件一分为二,目前一个是子组件,另一个是父组件。但是,目前在单击父组件上的提交按钮后,值会以某种方式变为空值,并且没有数据传递到数据库中。为什么会这样以及如何解决这个问题?
在Record.razor.cs
[Parameter]
public string Title { get; set; }
[Parameter]
public string Description { get; set; }
[Parameter]
public DateTime SelectedDate { get; set; }
Record.razor:
<Form Model="this" LabelColSpan="8" WrapperColSpan="16">
<FormItem Label="Record title" NoStyle>
<Input @bind-Value="@this.Title" />
</FormItem>
<FormItem Label="Description" NoStyle>
<Input @bind-Value="@this.Description" />
</FormItem>
<FormItem Label="Date" NoStyle>
<DatePicker @bind-Value="@this.SelectedDate" ShowTime="@true" OnChange="this.OnDateSelected" />
</FormItem>
</Form>
Index.razor.cs:
private DiaryRecord DiaryRecordModel { get; set; }
private bool isDialogVisible;
private DateTime SelectedDate { get; set; }
public Index()
{
this.DiaryRecordModel = new DiaryRecord();
this.SelectedDate = DateTime.Now;
}
Index.razor:
<Form Model="this.DiaryRecordModel"
OnFinish="(e) => this.OnCreateNewDiaryRecord()">
<FormItem>
<Record Description="@context.Description"
SelectedDate="this.SelectedDate"
Title="@context.Title" />
</FormItem>
<FormItem WrapperColOffset="8" WrapperColSpan="16">
<Button Type="@ButtonType.Primary" HtmlType="submit">
Submit
</Button>
<Button OnClick="(e)=>{this.isDialogVisible = false;}">Cancel</Button>
</FormItem>
</Form>
DiaryRecord.cs
public class DiaryRecord
{
public Guid Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
}
例如今天的日期总是被传递到模型中,而不是实际选择的日期(其他值不被纳入模型):
首先 - 不要在表单中使用表单。只使用 Index.razor.
上的那个
第二:
执行此操作后:Description="@context.Description"
您的上下文与字符串发生的任何事情都失去了联系。
这里有两个选择。
1] 使用 two-way binding,这将导致 @bind-Description="@context.Description"
,您还需要为 Record
组件内的每个 属性 创建 EventCaller
。
2](更好的一个)将您的整个模型发送到 Record
组件:
[Parameter] DiaryRecord DiaryRecord {get;set;}
<Input @bind-Value="@DiaryRecord.Title" />
<Record DiaryRecord=this.DiaryRecordModel/>
我已将大组件一分为二,目前一个是子组件,另一个是父组件。但是,目前在单击父组件上的提交按钮后,值会以某种方式变为空值,并且没有数据传递到数据库中。为什么会这样以及如何解决这个问题?
在Record.razor.cs
[Parameter]
public string Title { get; set; }
[Parameter]
public string Description { get; set; }
[Parameter]
public DateTime SelectedDate { get; set; }
Record.razor:
<Form Model="this" LabelColSpan="8" WrapperColSpan="16">
<FormItem Label="Record title" NoStyle>
<Input @bind-Value="@this.Title" />
</FormItem>
<FormItem Label="Description" NoStyle>
<Input @bind-Value="@this.Description" />
</FormItem>
<FormItem Label="Date" NoStyle>
<DatePicker @bind-Value="@this.SelectedDate" ShowTime="@true" OnChange="this.OnDateSelected" />
</FormItem>
</Form>
Index.razor.cs:
private DiaryRecord DiaryRecordModel { get; set; }
private bool isDialogVisible;
private DateTime SelectedDate { get; set; }
public Index()
{
this.DiaryRecordModel = new DiaryRecord();
this.SelectedDate = DateTime.Now;
}
Index.razor:
<Form Model="this.DiaryRecordModel"
OnFinish="(e) => this.OnCreateNewDiaryRecord()">
<FormItem>
<Record Description="@context.Description"
SelectedDate="this.SelectedDate"
Title="@context.Title" />
</FormItem>
<FormItem WrapperColOffset="8" WrapperColSpan="16">
<Button Type="@ButtonType.Primary" HtmlType="submit">
Submit
</Button>
<Button OnClick="(e)=>{this.isDialogVisible = false;}">Cancel</Button>
</FormItem>
</Form>
DiaryRecord.cs
public class DiaryRecord
{
public Guid Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
}
例如今天的日期总是被传递到模型中,而不是实际选择的日期(其他值不被纳入模型):
首先 - 不要在表单中使用表单。只使用 Index.razor.
上的那个第二:
执行此操作后:Description="@context.Description"
您的上下文与字符串发生的任何事情都失去了联系。
这里有两个选择。
1] 使用 two-way binding,这将导致 @bind-Description="@context.Description"
,您还需要为 Record
组件内的每个 属性 创建 EventCaller
。
2](更好的一个)将您的整个模型发送到 Record
组件:
[Parameter] DiaryRecord DiaryRecord {get;set;}
<Input @bind-Value="@DiaryRecord.Title" />
<Record DiaryRecord=this.DiaryRecordModel/>