将EditFrom拆分为多个组件



我想将一个表单拆分为几个子组件。

但是,子组件内的更改不会反映在主组件中。

如果我更改字段1a中的某些内容,则所有其他字段也会更改。这同样适用于字段1b。但是,如果我更改2a、2b、3a或3b中的某些内容,则只有2a、2b,3a和3b中的数据会更改。

如何获得正确的上下文?

Form.razor

<h1>Field 1a and 1b</h1>
<CascadingValue Value="@TestObject" Name="TestObject">
<EditForm Model="@TestObject">
<MgInputText @bind-Value="TestObject.Address"/>
<MgInputText @bind-Value="TestObject.Address" />
<Test />
</EditForm>
</CascadingValue>

MgInputText.razor

@inherits Microsoft.AspNetCore.Components.Forms.InputText
<input @attributes="@AdditionalAttributes" @bind="@CurrentValueAsString" @bind:event="oninput" />

Test.razor


<h1>Field 2a and 2b - GroupBox</h1>
<GroupBox>
<Title>TestData</Title>
<ChildContent>
<MgInputText @bind-Value="TestObject.Address" />
<MgInputText @bind-Value="TestObject.Address" />
</ChildContent>
</GroupBox>
<h2>Field 3a and 3b - Not in Component</h2>
<MgInputText @bind-Value="TestObject.Address" />
<MgInputText @bind-Value="TestObject.Address" />
@code{
[CascadingParameter(Name = "TestObject")]
public TestObject TestObject{ get; set; }
}

创建这样的自定义组件:

@using System.Linq.Expressions
@typeparam TValue
<input value="@Value" @oninput="HandleInput" />
@code {
[CascadingParameter] private EditContext EditContext { get; set; }
[Parameter] public TValue Value { get; set; }
[Parameter] public EventCallback<TValue> ValueChanged { get; set; }
[Parameter] public Expression<Func<TValue>> ValueExpression { get; set; }
private FieldIdentifier _fieldIdentifier;
protected override void OnInitialized()
{
_fieldIdentifier = FieldIdentifier.Create(ValueExpression);
}
private async Task HandleInput(ChangeEventArgs args)
{
if (EditContext != null)
{
EditContext.NotifyFieldChanged(_fieldIdentifier);
}
await ValueChanged.InvokeAsync((TValue)args.Value);
}
}

然后在任何您想要的地方调用自定义组件:

<AttributeInputs @bind-Value="ViewModel.Model.Description"></AttributeInputs>

相关内容

  • 没有找到相关文章

最新更新