【问题标题】:Blazor component ref Field is never assigned to [closed]Blazor 组件 ref 字段从未分配给 [关闭]
【发布时间】:2020-05-24 18:12:27
【问题描述】:

我找不到为什么这不起作用。可能只有我傻了。

我的模态组件收到一个可以隐藏和关闭的 TItem。我看过 MSDOCS,但我认为它完全一样。

@typeparam TItem

<div class="bmodal-bg" @onclick="Close">
    <div class="bmodal" style="@Style" @onclick:stopPropagation="true">
        @ModalContent(Item)
    </div>
</div>

@code {
    [Parameter] public RenderFragment<TItem> ModalContent { get; set; }
    [Parameter] public TItem Item { get; set; }
    [Parameter] public EventCallback<bool> OnModalClose { get; set; }

    private bool IsOpen { get; set; } = false;

    public void Show()
    {
        IsOpen = true;
    }

    public void Close()
    {
        IsOpen = false;
    }
}

我为接收 TItem 的模态组件创建了一个引用。

        private UIFuncionario NewFuncionario { get; set; } = new UIFuncionario();
        private Modal<UIFuncionario> ModalAddFuncionario;

我参考的部分

<Modal @ref="ModalAddFuncionario" Item="NewFuncionario">
    <ModalContent Context="p">
        <FormFuncionario Funcionario="p" />
    </ModalContent>
</Modal>

enter Error when you remove UIFuncionario Edit: Message of error.

【问题讨论】:

    标签: c# asp.net-core blazor blazor-server-side


    【解决方案1】:

    通常,在 OnAfterRender 事件上填充引用。如果您正在使用的模态组件有动画,那么您可能需要一个 Task.Delay(20) 才能获得 ref,以便子组件 OnAfterRender 触发并填充 ref

    编辑:将 getter 和 setter 添加到 ref 字段

    【讨论】:

    • 谢谢,我会试试的。
    • 我添加了一张图片,显示错误仍然存​​在,即使添加了 {get; set;} 时间不是问题,因为我只在按钮上调用 show 方法。
    • 您尝试过使用 OnAfterRender 吗?即使单击按钮,您仍然会得到一个重绘页面的 EventCallback 并且 OnAfterRender 再次触发,然后您有 refs
    • 问题是它永远不会得到一个始终为空的值,我认为出现问题是因为我使用 typeparam
    【解决方案2】:

    我很笨。我只是错过了@>@onclick。参考工作正常。对不起。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 2022-10-04
      • 2016-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多